当前位置:  开发笔记 > 编程语言 > 正文

如何允许汇编(单元测试一个)访问另一个汇编的内部属性?

如何解决《如何允许汇编(单元测试一个)访问另一个汇编的内部属性?》经验,为你挑选了3个好方法。

我希望我的核心程序集不会暴露某个类,我仍然希望能够测试它.我怎样才能做到这一点 ?



1> aku..:

InternalsVisibleTo属性救援!

只需添加:

[assembly:InternalsVisibleToAttribute("UnitTestAssemblyName")]

到您的Core类AssemblyInfo.cs文件

有关最佳做法,请参阅" 朋友程序集"(C#编程指南).


我只是按照aku链接的指导,成功完成了一个强大的命名程序集.我确实有一个问题.在完成所有配置后,我必须重新启动Visual Studio以使Intellisense正常工作.它会在重启之前编译,但总会显示红线.

2> Simon Keep..:

如果您的程序集被强名称,则使用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



3> Jay Bazuzi..:

我将我的单元测试放在与它正在测试的代码相同的程序集中.这对我来说很有意义,因为我认为"测试自己"是一个类的特征,以及"初始化自己"和"描述自己"之类的东西.

我听到过对这种方法的一些反对意见,但很少有人有说服力.

我说,它伤害了性能呸!没有硬数据就不优化!也许如果您计划通过慢速链接下载程序集,那么最小化程序集大小将是值得的.

这是一个安全风险.只有在测试中有秘密.不要那样做.

现在,你的情况与我的不同,所以也许它对你有意义,也许它不会.你必须自己解决这个问题.

旁白:在C#中,我曾尝试将我的单元测试放在一个名为"Tests"的类中,该类嵌套在它正在测试的类中.这使得事情的正确组织变得明显.它还避免了当类"Foo"的测试位于名为"FooTests"的类中时发生的名称重复.但是,我访问过的单元测试框架拒绝接受未标记为"公共"的测试.这意味着您正在测试的类不能"私有".我想不出有任何理由要求测试是"公开的",因为没有人真正称它们为公共方法 - 一切都是通过反思.如果您曾为.Net编写单元测试框架,请考虑允许非公开测试,为我着想!


如果在测试类上使用`[Conditional("DEBUG")]`那么它们不应该在生产程序集中并且不会损害性能.
有趣的方法.我完全同意公开测试.愚蠢的要求,IMO.
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有