我尝试了以下代码:
package ro.ex;
/**
* Created by roroco on 11/11/14.
*/
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Mockito.*;
public class ExTest extends junit.framework.TestCase {
class C {
public String m() {
return null;
}
}
public void testM() throws Exception {
when(new C().m()).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
return (String) args[0];
}
});
}
}
我希望我能更改一个真实的实例,而不是mock,而是上面的代码提升:
when() requires an argument which has to be 'a method call on a mock'.
我的问题是:如何修复它。
我假设这是您创建的用于在此处提问的示例代码,但实际上,C
应该是被测试的类(而不是测试中的类)。
Class MyClassToTest {
public String m() {...}
}
现在在测试中,模拟类C.@Mock C c
,然后是when(c.m()).thenAnswer....
。在测试方法中。
不确定为什么需要,但可以使用spy
:
public void testM() throws Exception {
C c = Mockito.spy(new C());
// actual method
c.m();
// stubbed method
when(c.m()).thenAnswer(...);
}
或者,您可以mock
对象,并在需要时调用thenCallRealMethod()
。