java如何测试在进行单元测试时调用另一个函数的函数?
我正在为我的程序做单元测试,但我遇到了一个问题。我不知道如何处理函数A调用函数的情况,我只想测试函数A。据说我应该创建一个存根模块来模拟作为存根模块的函数。但是我只是不知道如何通过JUnit
来做到这一点。
例如:
public class compute
{
public int multiply(int a,int b)
{
return a*b;
}
public int cube(int a)
{
return(multiply(multiply(a,a),a);
}
}
那么,在这种情况下,如何为函数cube()
编写测试代码呢?如何模拟multiply()
# 1 楼答案
您不需要在这里创建存根/模拟来模拟
multiply
方法通常在对不同对象调用方法时使用它们。例如,从服务类调用dao类,然后存根/模拟dao类。也就是说,正如Alan所指出的,您可以始终使用部分mock/anonymous类/对stub/mock的重写,只对被测试类的某些函数进行模拟
在本例中,您只需要按原样测试多维数据集方法,而无需模拟乘法
# 2 楼答案
可能没有理由在这里模仿任何东西,事实上也没有理由模仿cube()方法,因为它是有问题的。但是,如果需要,您可以使用Mockito之类的模拟框架创建部分模拟(即模拟类的某些方法,但为其他方法调用实际代码),单独测试类的方法 或者简单地重写匿名类中的multiply()方法,例如下面的,尽管您需要将多维数据集中的代码更改为*multiply(a,a)
# 3 楼答案
如果您非常想模拟这个方法,可以通过将这个类子类化并提供相关方法的模拟实现来实现
这就是说,在这种情况下,它真的没有必要,因为您实际上并不依赖任何第三方对象。如果您后来决定将多维数据集的实现更改为不使用乘法方法,则必须重写测试