2017-06-12 86 views
1

我遇到PIT突变问题,如果它删除class.callVoidMethod()它幸存下来。我假设我只需要验证通话是否已完成,但我无法让测试案例变绿。我尝试过Spying和Mocking,但我发现这个模拟与零交互。在调试时,我看到的仍然是调用真正的方法。任何想法如何让它使用模拟?使用Mockito验证从另一个类的方法被称为

方法测试:

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

'class'是保留关键字。这是一个错字吗? – callmepills

回答

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 
     } 
    } 
} 
相关问题