我有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并将其添加到集合中。
答案 0 :(得分:0)
对不起,那是我的错。 代码复制了许多模拟对象,将它们缓存在静态集合中,并且没有在setUp()中重置它