我遇到了PIT突变问题,如果它删除了class.callVoidMethod(),它就会存活下来。我假设我只需要验证呼叫已经完成,但我无法让测试用例变为绿色。我已经尝试过Spying和Mocking但是我得到的是与这个模拟没有任何交互。在调试时,我看到的仍然是调用真正的方法。知道如何让它使用模拟吗?
测试方法:
public void someMethod(String word)
{
word = "class"
SomeClass class = new SomeClass();
class.callVoidMethod(word, "char");
}
测试用例:
@InjectMocks
ClassUnderTest underTest;
@Mock
SomeClass class;
@Test
public void testSomeMethod()
{
underTest = new ClassUnderTest();
//Not Sure if I need this
Mockito.doCallRealMethod()
.when(class).callSomeVoidMethod(anyString());
underTest.someMethod("test");
Mockito.verify(class).callSomeVoidMethod(anyString());
}
答案 0 :(得分:1)
这是我在本地运行的一个例子。除了一些命名问题,主要问题是你实际上并没有嘲笑SomeClass
。您正在测试的方法是创建并调用实例。此外,在使用跑步者时,您无需创建测试主题的实例。
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class VerifyTest {
@InjectMocks
private ClassUnderTest underTest;
@Mock
private SomeClass clazz;
@Test
public void testSomeMethod() {
underTest.someMethod("test");
Mockito.verify(clazz).callVoidMethod("test", "char");
}
private static class ClassUnderTest {
private SomeClass clazz;
public void someMethod(String word) {
clazz.callVoidMethod(word, "char");
}
}
private static class SomeClass {
public void callVoidMethod(String word, String otherWord) {
// do nothing
}
}
}