我有一个类,我想在这里模拟某些类的方法并测试其他方法。这是我可以证明并证明它有效的唯一方法。
class UnderTest{
public void methodToTest(){
methodToCall1()
methodToCall2()
}
public void methodToCall1(){
}
public void methodToCall2(){
}
}
现在,因为我想测试第一个方法,我想创建一个UnderTest的部分模拟,这样我就可以验证这两个方法是否被调用。 我如何在Mockito实现这一目标?
感谢您的帮助!
答案 0 :(得分:5)
你提到你想做两件事:
1. Create real partial mocks
2. Verify method invocations
但是,由于您的目标是确认实际调用了methodToCall1()
和methodToCall2()
,因此您需要做的只是spy on the real object。这可以通过以下代码块完成:
//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();
...
答案 1 :(得分:2)
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();
}
}