gpt4 book ai didi

unit-testing - 如何对调用其他成员函数(C# 或 Java)的函数进行单元测试?

转载 作者:行者123 更新时间:2023-12-04 05:14:53 24 4
gpt4 key购买 nike

假设我有一个如下所示的类,我想对“DoCalculate(arg1, arg2)”函数进行单元测试:

public class Calc
{
public int DoCalculate(int arg1, int arg2)
{
int num1 = this.GetNum1(); // member function
int num2 = this.GetNum2(); // member function

if( this.flag1) // member variable
{
return num1*num2+arg1-arg2;
}
else
{
int num3 = this.GetNum3(); // member function
return num3 + arg2;
}
}
}

在这个函数中,它从其他成员函数和成员变量中获取输入。

如何对这个函数进行单元测试?或者如何重构以使其可单元测试?

最佳答案

我认为这里有几个选项。

解决方案可能取决于您的函数 GetNum*() 实际执行的操作。

当单元测试是两件事之一时,您想要什么,

  • 测试给定特定状态和指定输入,然后状态以预期方式改变和/或返回预期结果。
  • 测试组件之间的交互是否以预期的方式发生

看起来您的测试属于第一种类型。因此,为了使您的测试有用,您需要让您的类进入已知状态,以便 GetNum*() 函数(和您的标志)在调用时返回预期值。

  • 是否可以创建您的类的实例,以便在调用函数 GetNum*() 时您知道它们将返回什么(即可以通过设置属性或调用类的其他方法)
  • 或者 GetNum*() 函数做一些非确定性的事情(比如调用网络服务或从数据库加载一些东西)。

如果您处于第一种情况,那么很好,只需调用必要的方法/属性来创建您需要的状态,然后调用您的函数并对结果断言。

如果您处于第二种情况,那么您需要考虑将您的类分开并将执行外部调用的部分放入一个单独的类(它实现了一个定义两个类之间契约的接口(interface)),该类在该类上有依赖性。然后,您可以通过其构造函数将新接口(interface)的实例传递给此类(或者可能传递给您正在调用的方法,但可能是构造函数),然后在您的测试中传递一个模拟,它提供您需要能够测试的值方法快速可靠。

关于unit-testing - 如何对调用其他成员函数(C# 或 Java)的函数进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com