Nunit 测试 - 测试由 public 方法调用的私有方法代码的一部分

Nunit Test - To test a part of private method code that is being called by public method

我正在尝试在私有方法(方法 A)中测试一段代码。在流程中,此私有方法由 public 方法调用。 为了在方法 A 中测试此代码。它 returns 来自另一个私有方法(方法 B)的数据

public returntype MyTest()
{
  this.methodA();
}

private returntype methodA()
{
 rep = this.methodB(some paramethers);
// code to be tested using rep
}

private returntype methodB()
{
//some code
}

如何测试此代码?

私有方法只是实现细节,因此所有功能都应通过 public 接口进行测试。在您的情况下,通过 "MyTest" 方法。

Andreasnico 的回答是对测试哲学的陈述——我经常同意这一点。但这个问题是一个如何做的问题,所以我会这样回答,然后回到哲学部分。

显然,如果你的方法是私有的,你就不能调用它(除非通过反射,在我看来这有点傻)。最简单的做法是将其设为 public 并在其前面贴上注释 "public for testing only!" 你的编码标准或对面向对象的看法,可能会告诉你不要这样做,但请记住一些早期的单元测试框架是使用没有可见性修饰符的语言开发的,没有它们也能很好地运行。对于普通(非金融)商业应用程序,我认为这样做没有任何害处。

第二种最简单的方法是使方法成为 Internal 并使内部结构对您的测试程序集可见。对于 NUnit 自己的测试,这就是我们现在正在做的,尽管我们有很多使用第一种方法的遗留代码。

<哲学> 这里不是深入讨论白盒与黑盒单元测试的好地方。 NUnit(和其他框架)最初是由测试实现 其设计的开发人员创建的,并为这些开发人员创建。所以测试直接进入了肮脏的细节。如果您是开发人员——而不是测试人员——那么进行这种测试并没有错。事实上,如果您想以尽可能小的步骤进行 TDD,这就是您必须要做的。重要的是,IMO,你随时都知道自己在做什么。一个好的测试套件通常会有这两种测试。