我希望我的核心程序集不会暴露某个类,我仍然希望能够测试它.我怎样才能做到这一点 ?
InternalsVisibleTo属性救援!
只需添加:
[assembly:InternalsVisibleToAttribute("UnitTestAssemblyName")]
到您的Core类AssemblyInfo.cs文件
有关最佳做法,请参阅" 朋友程序集"(C#编程指南).
如果您的程序集被强名称,则使用InternalsVisible,您需要指定公钥(注意:完整密钥而不是公钥标记),例如......
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("BoardEx_BusinessObjects.Tests,
PublicKey=0024000004800000940000000602000000240000525341310004000001000100fb3a2d8 etc etc")]
以下技巧对于获取公钥非常有用,而无需使用cmd行...
http://www.andrewconnell.com/blog/archive/2006/09/15/4587.aspx
我将我的单元测试放在与它正在测试的代码相同的程序集中.这对我来说很有意义,因为我认为"测试自己"是一个类的特征,以及"初始化自己"和"描述自己"之类的东西.
我听到过对这种方法的一些反对意见,但很少有人有说服力.
我说,它伤害了性能呸!没有硬数据就不优化!也许如果您计划通过慢速链接下载程序集,那么最小化程序集大小将是值得的.
这是一个安全风险.只有在测试中有秘密.不要那样做.
现在,你的情况与我的不同,所以也许它对你有意义,也许它不会.你必须自己解决这个问题.
旁白:在C#中,我曾尝试将我的单元测试放在一个名为"Tests"的类中,该类嵌套在它正在测试的类中.这使得事情的正确组织变得明显.它还避免了当类"Foo"的测试位于名为"FooTests"的类中时发生的名称重复.但是,我访问过的单元测试框架拒绝接受未标记为"公共"的测试.这意味着您正在测试的类不能"私有".我想不出有任何理由要求测试是"公开的",因为没有人真正称它们为公共方法 - 一切都是通过反思.如果您曾为.Net编写单元测试框架,请考虑允许非公开测试,为我着想!