NUnit 测试 - 如何将 public 方法内部调用的私有方法设置为 return 特定值?

NUnit Test - How to set up a private method called inside public method to return specific value?

我正在尝试使用 NUnit 测试以下 GetNumber public 方法。

public GetNumber()
{
   var numberOfUsers = GetNumberOfUsers();
   var number = numberOfUsers + 1;

  return number;
}  

为了全面测试它,我需要私有的 GetNumberOfUsers 方法在测试执行期间 return 一个特定的值,例如0 或 1。如何设置测试以使 GetNumberOfUsers return 成为我想要的值?

测试逻辑如下所示:

[Test]
public void GetNumberTest()
{

   //setup GetNumberOfUsers so that it returns 0

   var result = object.GetNumber();

   Assert.AreEqual(1, result);

}

你不能。您的目标应该是测试您的 public 界面。您没有提供有关 GetNumberOfUsers 从何处获取结果的足够详细信息,这使得很难为您提供最佳解决方案。您可以使 GetNumberOfUsers 受保护并在子类中覆盖它。例如

public class MyClass
{
  public int GetNumbers()
  {
    var numberOfUsers = GetNumberOfUsers();
  }

  protected virtual GetNumberOfUsers()
  { // implementation } 
}

public class MyClassImplForTesting : MyClass
{
  public int NumberOfUsers {get; set;} = 10;
  protected overrides GetNumberOfUsers()
  {
    return NumberOfUsers;
  }
}