我正在开始对Visual-Studio 2008方式进行单元测试,我想知道为了测试目的,完成跨程序class
访问的最佳方法是什么。
基本上,我在一个解决方案中有两个项目:
MyProject中的所有内容目前都具有默认辅助功能,如果我没记错,这意味着一切都有效internal
。我主要希望在class
级别进行测试,但有一些delegates
参与。
将来某个时候可能会有一个外部API,但我大约有20%的功能完整(至少在纸面上)并且我对在未经测试的基础上分层更多代码非常谨慎核心。因此,我想在应用程序完成足够传统(读取:坏和/或懒惰)功能测试之前完成一些测试,并且肯定在版本n + 1外部API启动之前。
除了直接的答案之外,我们将非常感谢该解决方案的一个例子。
答案 0 :(得分:34)
您可以使用程序集级属性InternalsVisibleToAttribute来实现此目的。
添加
[assembly:InternalsVisibleTo("MyProjectTests")]
到MyProject程序集中的AssemblyInfo.cs。
答案 1 :(得分:3)
您需要添加
[assembly:InternalsVisibleTo("Unit.Tests.Assembly")]
到你的“MyProject(C#)”的AssemblyInfo.cs。然后,您的测试可以访问内部测试方法。
答案 2 :(得分:3)
您可以通过向主项目的AssemblyInfo.cs添加属性来测试内部方法,从而可以访问命名程序集的内部方法:
[组件:InternalsVisibleTo( “MyProjectTestsNameSpace.MyProjectTests”)]
更多信息是here
答案 3 :(得分:1)
您似乎需要InternalsVisibleToAttribute
但是我建议不要采用这种方法 - 通过公共接口或API测试你的内部类。
答案 4 :(得分:1)
虽然[InternalsVisibleTo]
是IMO最明智的方式,但至少还有其他两种方法:
var method = instance.GetType().GetMethod(
methodName, BindingFlags.NonPublic | BindingFlags.Instance,
null, paramTypeArray, null);
return method.Invoke(instance, parameters);
这种方法的问题在于,如果方法名称或签名发生变化,单元测试将在运行时开始失败,而[InternalsVisibleTo]
在编译时很容易被这个重大变化所取代。
Moles / Fakes
或TypeMock
答案 5 :(得分:1)
我发现了这一个https://msdn.microsoft.com/en-us/library/hh598957.aspx希望它可以帮助某人。
要点: