我最近注意到,不尊重在.NET程序集中的受保护方法中添加[TestInitialize],但是如果我将该方法公开,则它会被单元测试运行程序(在这种情况下为Resharper)调用。我过去用测试方法已经注意到了这几次。
从技术上讲,它就像公开方法一样容易反映在私有方法上。实际上,反射是一种用于对私有方法进行单元测试的方法。
那么,为什么我需要公开我所有的单元测试方法?
2
这是一个非常好的问题。我听到的唯一一个很好的论据是它遵循SOLID原理的“对接口编程,而不是对实现编程”原则。
—
罗伯特·哈维
我认为他不是在谈论测试他的类,而是在谈论由测试框架调用的实际测试方法。
—
jtiger 2015年
@RobertHarvey在Java中,类似限制的原因(例如在JUnit中)是因为框架设计人员不想弄乱
—
t
setAccessible
那些可以被某些自定义SecurityManager阻止的问题
您需要考虑到此设计决策是针对针对广泛使用的通用框架而做出的。在这种情况下,让设计师承担并做好最坏的准备就更安全了。我不知道,如果是某个公司内部框架(可以有机会保证所需的安全策略),或者如果它是狭义的,专门用途的工具(请考虑“无法访问的成员的查看器”),设计师会考虑其他选择
—
gna
@GregBurghardt在Nunit和Microsoft未编写的其他测试框架中都发现了此行为。在问了这个问题之后的几年里,我当然对.NET有了更多的了解,但是我仍然认为这是一个公平的问题,并且在注释中进行了一些很好的讨论。
—
贾斯汀·迪林