有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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()


共 (3) 个答案

  1. # 1 楼答案

    您不需要在这里创建存根/模拟来模拟multiply方法

    通常在对不同对象调用方法时使用它们。例如,从服务类调用dao类,然后存根/模拟dao类。也就是说,正如Alan所指出的,您可以始终使用部分mock/anonymous类/对stub/mock的重写,只对被测试类的某些函数进行模拟

    在本例中,您只需要按原样测试多维数据集方法,而无需模拟乘法

  2. # 2 楼答案

    可能没有理由在这里模仿任何东西,事实上也没有理由模仿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;
            }
        };
    }
    
  3. # 3 楼答案

    如果您非常想模拟这个方法,可以通过将这个类子类化并提供相关方法的模拟实现来实现

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