我有两个测试,它们调用相同的代码,但检查不同的东西。第一个使用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()中重置它