如何在进行单元测试时测试调用另一个函数的函数?

时间:2016-09-10 09:35:48

标签: java unit-testing junit

我正在为我的程序进行单元测试,但是我遇到了问题。我不知道如何处理函数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()

3 个答案:

答案 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)

如果你急于模仿这个方法,可以通过继承这个类并在那里提供相关方法的模拟实现来完成。

那就是说,在这种情况下它并不是必需的,因为你并不真正依赖任何第三方对象。如果您以后决定将多维数据集的实现更改为不使用乘法方法,则必须重写测试。