Mockito,间谍 - 不确定如何进行部分嘲笑



我有一个类,我想在其中模拟该类的某些方法并测试其他方法。这是我可以验证并断言它正在工作的唯一方法。

class UnderTest{
   public void methodToTest(){
     methodToCall1()
     methodToCall2()
   }

  public void methodToCall1(){
  }
  public void methodToCall2(){
  }
}

现在,由于我想测试第一个方法,我想创建 UnderTest 的部分模拟,以便我可以验证是否调用了这两个方法。如何在 Mockito 中实现这一目标?

感谢您的帮助!

你提到你想做两件事:
1. 创建真实的部分模拟
2. 验证方法调用

但是,由于您的目标是验证实际调用了methodToCall1()methodToCall2(),因此您需要做的就是监视真实对象。这可以通过以下代码块实现:

    //Spy UnderTest and call methodToTest()
    UnderTest mUnderTest = new UnderTest();
    UnderTest spyUnderTest = Spy(mUnderTest);
    spyUnderTest.methodToTest();
    //Verify methodToCall1() and methodToCall2() were invoked
    verify(spyUnderTest).methodToCall1();
    verify(spyUnderTest).methodToCall2();

如果未调用其中一个方法,例如 methodToCall1 ,将引发异常:

    Exception in thread "main" Wanted but not invoked:
    undertest.methodToCall1();
    ...
package foo;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
    @Spy
    private UnderTest underTest;
    @Test
    public void whenMethodToTestExecutedThenMethods1And2AreCalled() {
        // Act
        underTest.methodToTest();
        // Assert
        verify(underTest).methodToCall1();
        verify(underTest).methodToCall2();
    }
}

相关内容

  • 没有找到相关文章

最新更新