How to access classes in another assembly for unit-testing purposes?
我正在进入对Visual Studio 2008方式进行单元测试的过程,并且我想知道什么是实现用于测试目的的交叉组装
MyProject中的所有当前具有默认可访问性,如果我正确回想意味着所有内容均有效
将来可能会使用外部API,但我大约有20岁拥有完整功能(至少在纸上)的方式所占的百分比,而我对在此未经测试的内核之上分层添加更多代码感到非常不快。因此,我想在应用程序完成足够的工作以进行传统(读取:错误和/或懒惰)功能测试之前,肯定要在n 1个外部API版本启动之前进行一些测试。除了直接的答案外,还将非常感谢您提供解决方案的示例。
您可以使用程序集级属性InternalsVisibleToAttribute实现此目的。
在MyProject程序集中的AssemblyInfo.cs中添加
1 | [assembly:InternalsVisibleTo("MyProjectTests")] |
。
您需要将
1 | [assembly:InternalsVisibleTo("Unit.Tests.Assembly")] |
添加到" MyProject(C#)"的AssemblyInfo.cs中。然后,您的测试就可以访问内部测试方法。
您可以通过以下方法测试内部方法:在主项目的AssemblyInfo.cs中添加属性,并允许访问命名程序集的内部方法:
[assembly:InternalsVisibleTo(" MyProjectTestsNameSpace.MyProjectTests ")]
更多信息在这里
我发现了这个https://msdn.microsoft.com/zh-cn/library/hh598957.aspx希望它可以对某人有所帮助。
摘要:
- 在您的单元测试项目,添加对被测代码的引用。以下是在同一解决方案中创建对代码项目的引用的方法:
- 在解决方案资源管理器中选择项目。
- 在"项目"菜单上,选择"添加引用.....
- 在"引用管理器"对话框中,打开"解决方案"节点,然后选择"项目"。
- 检查代码项目名称并关闭对话框。
尽管
-
通过使用Reflection
1
2
3
4var method = instance.GetType().GetMethod(
methodName, BindingFlags.NonPublic | BindingFlags.Instance,
null, paramTypeArray, null);
return method.Invoke(instance, parameters);
此方法的问题在于,如果方法名称或签名发生更改,则单元测试将在运行时开始失败,而
- 使用诸如
Moles / Fakes 或TypeMock 的测试框架
看起来您需要InternalsVisibleToAttribute
但是我还是建议您反对这种方法-通过公共接口或API测试内部类。