我想知道如何正确使用NUnit。首先,我创建了一个单独的测试项目,它使用我的主项目作为参考。但在这种情况下,我无法测试私有方法。我的猜测是我需要将我的测试代码包含在我的主代码中?!-这似乎不是正确的方法。(我不喜欢在代码中包含测试的想法。)
如何使用NUnit测试私有方法?
发布于 2008-10-30 11:23:31
通常,单元测试处理类的公共接口,理论上认为实现是无关紧要的,只要结果从客户的角度来看是正确的。
因此,NUnit不提供任何用于测试非公共成员的机制。
发布于 2012-01-27 23:08:41
虽然我同意单元测试的重点应该是公共接口,但如果你也测试私有方法,你会对你的代码有一个更细粒度的印象。MS测试框架通过使用PrivateObject和PrivateType实现了这一点,而NUnit则没有。我要做的是:
private MethodInfo GetMethod(string methodName)
{
if (string.IsNullOrWhiteSpace(methodName))
Assert.Fail("methodName cannot be null or whitespace");
var method = this.objectUnderTest.GetType()
.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
if (method == null)
Assert.Fail(string.Format("{0} method not found", methodName));
return method;
}
这种方式意味着您不必为了提高可测试性而折衷封装。记住,如果你想测试私有的静态方法,你需要修改你的BindingFlags。上面的例子仅仅是实例方法。
发布于 2008-10-30 11:43:57
编写单元测试的一种常见模式是只测试公共方法。
如果你发现你有很多私有方法要测试,通常这是你应该重构你的代码的信号。
在它们当前所在的类上公开这些方法是错误的。这会破坏你想让那个类拥有的契约。
将它们移到帮助器类并在那里公开它们可能是正确的。此类不能由您的API公开。
这样测试代码就不会和你的公共代码混在一起了。
一个类似的问题是测试私有类,即。不能从程序集中导出的类。在这种情况下,您可以使用属性InternalsVisibleTo显式地使您的测试代码程序集成为产品代码程序集的朋友。
https://stackoverflow.com/questions/249847
复制相似问题