在使用Mockito时
我在 2 个测试用例中使用相同的模拟(我知道这是一个糟糕的测试设计,但这是一个实验)
@Test
public void test1()
{
Mockito.when(mock.method1()).thenAnswer(new Answer<Boolean>()
{
@Override
public Boolean answer(InvocationOnMock temp) throws Throwable
{
return true;
}
}
......
}
@Test
public void test2()
{
Mockito.when(mock.method1()).thenReturn(false);
....
}
当测试按顺序运行时
测试1
测试2
模拟方法在 Test2 中仍返回 true。这是预期行为还是错误?
更新:
- 该方法不是最终的
- 我正在使用JUnit。
正如你提到的,Mockito建议不要在测试用例中重用模拟。
也就是说,您可能想尝试在每个测试用例中重置模拟:
List mock = mock(List.class);
when(mock.size()).thenReturn(10);
mock.add(1);
reset(mock);
//at this point the mock forgot any interactions & stubbing
重置模拟
如果这没有帮助
我还看到您在一种方法中使用thenAnswer()
,在另一种方法中使用thenReturn()
。 你能考虑在这两种情况下都使用thenReturn()
吗?
Mockito在其文档中包含了有关回调存根的建议:
我们建议仅使用 thenReturn() 或 thenThrow() 使用简单的存根。
使用回调存根