c# - 如何在 Visual Studio 单元测试中使用包含私有(private)类型的泛型

标签 c# unit-testing generics

我尝试测试的类(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/

相关文章:

generics - Rust 类型级乘法

c# - 新查询返回的架构与基本查询不同 (C#/SQL - VS 2012)

c# - 正则表达式 - 提取子串

c# - 检查两个值之一是否为空而另一个不为空的简洁方法

c# - 如何将 Task<TDerived> 转换为 Task<TBase>?

php - Symfony 单元测试 : how to set the request content type?

python - 测试 Python 描述符

scala - 无需强制转换即可覆盖特征的通用方法

c# - 使用通用类型保持代码组织

reactjs - 语法错误: Cannot use import statement outside a module Jest when node modules are ignored