我是使用Mockito进行JUnit测试的新手。我正在努力找出“测试逻辑”问题,其中之一是存根到底。

让我举一个简单的例子:

首先,让我们假设这是要测试的类:

Class ToBeTested {
    public int a1() {}
    public int a2() {}
    public int a3() {}

    public int A() {
        return a1() + a2() + a3();
    }

    public int B() {
        temp = A();
        return temp++;
    }
}


当我尝试编写JUnit测试时,我不确定如何对这些方法进行存根。例如:

@Test
public void testB() {
    ToBeTested mockedTBT = mock(ToBeTested.class);

    /*
     *Problem here: How Deep to stub?
     */

    //shallow stubbing
    BDDMockito.given(mockedTBT.A()).willReturn(6);

    //deep stubbing
    BDDMockito.given(mockedTBT.a1()).willReturn(1);
    BDDMockito.given(mockedTBT.a2()).willReturn(2);
    BDDMockito.given(mockedTBT.a3()).willReturn(3);

    int expected = 7;
    int result= mockedTBT.B();

    assertEquals(expected, result);
}


在这种情况下,应该使用浅桩还是深桩?还是我可以遵循任何规则编写合理的测试?

在此先感谢您的帮助。

最佳答案

您应该模拟测试您关注的行为所需的最小数量。

在上面的示例中,您似乎在乎B()正在调用A()并返回递增的值。因此,只需模拟来自A()的响应。

您稍后可能希望测试A()的功能,在这种情况下,您可以选择模拟A()调用的其他方法。

关于java - Mockito: stub 到底有多深?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17679326/

10-10 10:37