最近为了实现一个类的私有(private)方法的单元测试,我使用了的PrivateObject。创建私有(private)访问器而不是使用反射 ,我收到了以下代码审查评论:
"My main concern with Private Object is the use of object[] in constructor. It replaces strong typing enforced by compiler with JavaScript-style run-time error detection.Consequently , personally, I would not recommend it."
上面的这条评论让我很困惑,因为根据我的理解,Reflection 也需要
object[]
调用任何方法。请帮助我了解最好的方法是什么。
最佳答案
用私有(private)继承类(现在
protected) 方法并提供公共(public)
调用不可见的方法
外部 protected 方法。
这在伟大的书籍 Refactoring Test Code http://xunitpatterns.com/ 中称为测试特定子类或测试特定扩展
你可以在这里阅读更多关于测试私有(private)方法的细节和想法:http://xunitpatterns.com/Test-Specific%20Subclass.html
它像
public TestClass : RealClass
{
public int CallHiddenCalculate()
{
return Calculate(); // Calculate is now protected method that we expose for test purposes in this class
}
}
你可以放置这个类来测试程序集,这样你的真实程序集就不会包含测试特定的逻辑和类,因为它的设计不好。
#如果调试
上市
#别的
私有(private)的
#万一
在这种情况下,在 Debug 中您可以调用单元测试,但在发布时这些方法将不可见。
然而,这种方法比上述方法差得多,也更难看。
仅仅测试公共(public)接口(interface)很容易不够(而且通常不是),以说明您获得了良好的测试覆盖率并且您的代码易于维护和重构。
至于将私有(private)方法标记为内部方法并让测试程序集看到内部方法是不好的,原因有很多
从您的组装开始,因为它们是
内部
(这些方法的内部将
仅用于测试目的)在
您的产品的发布版本,
哪个不好
我认为还有更多,但这些是最重要的
关于.net - 在 .NET 中对私有(private)方法进行单元测试的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087413/