如何鼹鼠实例字段
本文关键字:实例 字段 鼹鼠 何鼹鼠 | 更新日期: 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
实例的地方传递包装器。