在同一个模拟器上多次模拟一个方法调用

时间:2015-01-17 03:32:19

标签: mockito

使用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);
    ....
}

当测试按顺序运行时

TEST1

TEST2

模拟方法仍然在test2中返回true。这是预期的行为还是这个错误?

更新:

  1. 方法不是最终的
  2. 我正在使用JUnit。

1 个答案:

答案 0 :(得分:0)

正如您所提到的,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

Resetting mocks

如果没有帮助

我也看到你在一种方法中使用thenAnswer(),在另一种方法中使用thenReturn()。你能考虑在两种情况下使用thenReturn()吗?

Mockito在其文档中包含了有关回调存根的建议:

  

我们建议仅使用thenReturn()或thenThrow()使用简单的存根。

Stubbing with Callbacks