为什么doAnswer()存根未重置



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

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

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

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

    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);        
    }

嘿,这就是我明白这是我的错,而不是莫基托。在这里,我添加了新的mMyMockedObject,但忘记删除mMyMokedObject的旧实例(在SomClassICantShareNda中,在静态集合中)。因此,在每次测试之后,都会创建新的mMyMockedObject并将其添加到集合中。

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

相关内容

  • 没有找到相关文章

最新更新