首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用NUnit测试私有方法?

如何使用NUnit测试私有方法?
EN

Stack Overflow用户
提问于 2008-10-30 11:20:26
回答 12查看 62.1K关注 0票数 111

我想知道如何正确使用NUnit。首先,我创建了一个单独的测试项目,它使用我的主项目作为参考。但在这种情况下,我无法测试私有方法。我的猜测是我需要将我的测试代码包含在我的主代码中?!-这似乎不是正确的方法。(我不喜欢在代码中包含测试的想法。)

如何使用NUnit测试私有方法?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2008-10-30 11:23:31

通常,单元测试处理类的公共接口,理论上认为实现是无关紧要的,只要结果从客户的角度来看是正确的。

因此,NUnit不提供任何用于测试非公共成员的机制。

票数 74
EN

Stack Overflow用户

发布于 2012-01-27 23:08:41

虽然我同意单元测试的重点应该是公共接口,但如果你也测试私有方法,你会对你的代码有一个更细粒度的印象。MS测试框架通过使用PrivateObject和PrivateType实现了这一点,而NUnit则没有。我要做的是:

代码语言:javascript
复制
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。上面的例子仅仅是实例方法。

票数 65
EN

Stack Overflow用户

发布于 2008-10-30 11:43:57

编写单元测试的一种常见模式是只测试公共方法。

如果你发现你有很多私有方法要测试,通常这是你应该重构你的代码的信号。

在它们当前所在的类上公开这些方法是错误的。这会破坏你想让那个类拥有的契约。

将它们移到帮助器类并在那里公开它们可能是正确的。此类不能由您的API公开。

这样测试代码就不会和你的公共代码混在一起了。

一个类似的问题是测试私有类,即。不能从程序集中导出的类。在这种情况下,您可以使用属性InternalsVisibleTo显式地使您的测试代码程序集成为产品代码程序集的朋友。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/249847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档