我正在为我的程序进行单元测试,但是我遇到了问题。我不知道如何处理函数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()
?
答案 0 :(得分:0)
您无需在此处创建存根/模拟来模拟<?xml version="1.0" encoding="UTF-8"?>
<xp:view
xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.data>
<xp:dominoDocument var="doc" formName="Test" />
</xp:this.data>
<xc:ccFields index="1" />
<xc:ccFields index="2" />
<xp:messages />
<xp:button
value="save"
id="button1">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="complete"
immediate="false"
save="true">
</xp:eventHandler>
</xp:button>
</xp:view>
方法。
当您在另一个对象上调用方法时,通常会使用它们。例如,从服务类调用dao类,然后存根/模拟dao类。据说,正如Alan所说,你总是可以使用部分模拟/匿名类/覆盖来存根/模拟被测试类的某些功能。
在你的情况下,你只需要测试立方体方法,不需要模拟乘法。
答案 1 :(得分:0)
可能没有理由在这里使用你的cube()方法来模拟任何东西,因为它是有问题的。但是,如果需要使用模拟框架(如Mockito)创建部分模拟(即模拟类的某些方法但为其他人调用实际代码),则可以单独测试类的方法。 或者简单地覆盖匿名类中的multiply()方法,例如在下面,尽管您需要将多维数据集中的代码更改为* multiply(a,a)
@Test
public void testCube(){
compute c = createMock(9);
Assert.assertTrue(27, c.cube(3));
}
public compute createMock(final int result){
compute c = new compute(){
@Override
public int multiply(int a, int b){
return result;
}
};
}
答案 2 :(得分:0)
如果你急于模仿这个方法,可以通过继承这个类并在那里提供相关方法的模拟实现来完成。
那就是说,在这种情况下它并不是必需的,因为你并不真正依赖任何第三方对象。如果您以后决定将多维数据集的实现更改为不使用乘法方法,则必须重写测试。