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

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

概述假设我有一个如下所示的类,我想对’DoCalculate(arg1,arg2)’函数进行单元测试: public class Calc{ public int DoCalculate(int arg1, int arg2) { int num1 = this.GetNum1(); // member function int num2 = th 假设我有一个如下所示的类,我想对’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 *()函数做一些非确定性的事情(比如调用Web服务或从数据库加载某些东西).

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

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

总结

以上是内存溢出为你收集整理的unit-testing – 如何对调用其他成员函数(C#或Java)的函数进行单元测试?全部内容,希望文章能够帮你解决unit-testing – 如何对调用其他成员函数(C#或Java)的函数进行单元测试?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1219199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存