如何鼹鼠实例字段

本文关键字:实例 字段 鼹鼠 何鼹鼠 | 更新日期: 2023-09-27 18:34:40

我正在尝试为System.Security.Cryptography.CspParameters类创建一个摩尔,更具体地说是针对KeyContainerName。问题是,它的痣委托没有出现在智能感知中。这是我使用的代码:

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

KeyContainerNameSetString实际上不可用。我认为这是因为KeyContainerName是一个领域而不是一个属性。

关于我如何鼹鼠这个领域以便我可以测试它的任何想法?

如何鼹鼠实例字段

默认情况下,字段是可写的,因此在这种情况下不必使用 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");
}

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

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