为什么答案()存根不会被重置?

时间:2015-12-18 09:58:32

标签: java mockito

我有2个测试,它们调用相同的代码,但检查不同的东西。 第一个使用doAnswer()来存根方法调用并放置参数检查器。 第二个不需要它。

但是当我运行我的测试时,第二次测试失败,因为第一次测试中注入的检查器失败了。如果我只进行第二次测试就会通过。

那么,我应该使用doAnswer()方法用空检查器重置setUp()存根吗?为什么这样?

这是我在第一次测试中使用的检查器:

    final Map<String, String> expectedParams = new HashMap<>();
    expectedParams.put("param1", "A");
    doAnswer(new Answer() {
        public Object answer(InvocationOnMock invocation) {
            Object[] args = invocation.getArguments();
            String name = (String) args[0];
            Assert.assertEquals("event1", name);
            Map<String, String> params = (Map<String, String>) args[1];
            Assert.assertEquals(expectedParams, params);
            return null;
        }}).when(mMyMockedObject).myTestedMethod(anyString(), anyMap());

这是开始

@Mock
MyMockedClass mMyMockedObject;

@Before
public void setUp() throws Exception {
    System.out.println("setUp()");
    MockitoAnnotations.initMocks(this);        
}

在第二次测试中我从不调用doAnswer(),但我的检查员被称为我不知道原因:(

添加整个测试。

@RunWith(LocalRobolectricTestRunner.class)
@Config(manifest = Config.NONE)
public class MyTest {
    private static final String MAIN = "main";

    @Mock
    MyMockedClass mMyMockedObject;

    @Before
    public void setUp() throws Exception {
        System.out.println("setUp()");
        MockitoAnnotations.initMocks(this);

        // this will connect MAIN with mMyMockedObject
        SomClassICantShareNda.someMethodNda(MAIN, mMyMockedObject);        
    }
嘿,这是我明白这是我的错,而不是Mockito。 这是我添加新的mMyMockedObject但忘记删除mMyMockedObject的旧实例(在静态集合中的SomClassICantShareNda内)。因此,在每次测试之后,将创建新的mMyMockedObject并将其添加到集合中。

1 个答案:

答案 0 :(得分:0)

对不起,那是我的错。 代码复制了许多模拟对象,将它们缓存在静态集合中,并且没有在setUp()中重置它