我尝试测试的类(class)有问题。我已经声明了一个私有(private)枚举,并且在代码的通用字典中使用了它。这个枚举在这个类之外没有任何意义,但它在私有(private)方法中使用。当我生成代码时,访问器被写入通用字典类型,但当我尝试使用测试时抛出无效转换异常。
MyClass_Accessor target = new MyClass_Accessor();
Dictionary<MyClass_Accessor.MyEnum, long> dictionary = new Dictionary<MyClass_Accessor.MyEnum, long>();
dictionary.Add(MyClass_Accessor.Myenum.EnumValue, 1);
target.Method(dictionary); //Throws invalid cast exception here.
异常(exception)的是accessor => enum, long 的泛型字典不能转换为Myclass => enum, long。
除了改变我的工作阶层,有什么方法可以测试这个方法吗?
最佳答案
您可以使用 InternalsVisibleTo 程序集属性,并将您的 privates 更改为 internals。 (如果您不能将私有(private)枚举更改为内部枚举,那么这将不起作用,但通常这是一个可以接受的权衡。)
假设您有一个名为 AssemblyA 的程序集,它正在由 AssemblyATest 进行单元测试,并由 AssemblyAIntegTest 进行集成测试,您可以将以下内容粘贴到您的 AssemblyInfo.cs 文件中:
using System.Runtime.CompilerServices;
// ...
[assembly: InternalsVisibleTo("AssemblyATest")]
[assembly: InternalsVisibleTo("AssemblyAIntegTest")]
如果您对主程序集进行签名,您还需要对测试程序集进行签名,并提供完全限定的、有文化的和主键的程序集名称。
关于c# - 如何在 Visual Studio 单元测试中使用包含私有(private)类型的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/880609/