1

我正在尝试为System.Security.Cryptography.CspParameters班级创建一个痣,更具体地说是为KeyContainerName. 问题是,它的 moles 代表没有出现在 Intellisense 中。这是我正在使用的代码:

MCspParameters.AllInstances.KeyContainerNameSetString = (
    CspParameters parameters, 
    string name) =>
{
   // ...
}

KeyContainerNameSetString实际不可用。我认为这是因为KeyContainerName它是一个字段而不是一个属性。

有什么想法可以让我在这个领域进行测试吗?

4

2 回答 2

0

默认情况下,字段是可写的,因此在这种情况下不需要使用 Moles,只需将其设置为您想要的值即可。

cspParameters.KeyContainerName = "MyContainerName";

但是,由于您正在使用,MCspParameters.AllInstances我会假设CspParameters您想要执行的实例是在您的控制之外创建的,并且您无法在使用它之前对其进行设置。

在这种情况下,您可以使用该类的所有其他构造函数调用的构造函数,并将问题中的字段设置为您的特定值。像这样的东西:

[TestMethod()]
[HostType("Moles")]
public void Test()
{
    MCspParameters.ConstructorInt32StringStringCspProviderFlags = (
        p, 
        providerType, 
        providerName, 
        keyContainerName, 
        flags) => 
    {
        p.ProviderType = providerType;
        p.ProviderName = providerName;
        p.KeyContainerName = "MyContainerName";
        p.KeyNumber = -1;
        p.Flags = flags;
    };

    CspParameters cspParameters = new CspParameters(1);

    Assert.AreEqual(cspParameters.ProviderType, 1);
    Assert.AreEqual(cspParameters.KeyContainerName, "MyContainerName");
}
于 2012-05-17T16:41:34.567 回答
0

似乎没有办法绕过公共领域。因此,如果您想确保某个特定字段已设置为某个值 - 您很不走运。我想作为一种解决方法,您可以为CspParameters具有与其每个字段对应的属性的类创建一个包装器,并在程序中尽可能使用包装器,并在测试中绕过属性。

您可能还可以从包装器实现隐式转换,CspParameters以便能够在需要实例的地方传递包装器CspParameters

于 2012-05-17T16:47:06.747 回答