Java 为什么不重置doAnswer()存根?
我有两个测试调用相同的代码,但检查不同的东西。 第一种方法使用Java 为什么不重置doAnswer()存根?,java,mockito,Java,Mockito,我有两个测试调用相同的代码,但检查不同的东西。 第一种方法使用doAnswer()存根方法调用并将参数放入检查程序。 第二个不需要它 但是当我运行测试时,第二个测试失败了,因为第一个测试中注入的检查器失败了。如果我只运行第二个测试,它就会通过 那么,我是否应该在我的setUp()方法中用空检查器重置doAnswer()存根?为什么会这样 这是我在第一次测试中使用的检查器: final Map<String, String> expectedParams = new HashM
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());
在第二个测试中,我从不调用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,但忘记了删除mMyMockedObject的旧实例(在SomClassICantShareNda中,在静态集合中)。因此,每次测试后,都会创建新的mMyMockedObject并将其添加到集合中。对不起,这是我的错。
代码复制了许多模拟对象,将它们缓存在一个静态集合中,并且没有在setUp()中重置它。您可以提供整个测试吗?谢谢,这有助于我了解发生了什么。
@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);
}