我是使用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/