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;
}
}
我正在尝试使用 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;
}
}