atLeast(int minNumberOfInvocations)
允许至少 x 次调用的验证。
atLeastOnce()
允许至少一次调用的验证。
atMost(int maxNumberOfInvocations)
允许最多 x 次调用的验证。
atMostOnce()
允许最多一次调用的验证。
never()
times(0)
的别名,见
times(int)
。
only()
允许检查给定的方法是否只调用一次。
times(int wantedNumberOfInvocations)
允许验证调用的确切次数。
verify(T mock)
验证某些行为
发生过一次
。
verify(T mock, VerificationMode mode)
验证某些行为至少发生过一次/确切的次数/从未发生过。
verifyNoInteractions(Object... mocks)
验证给定的mock对象上没有发生交互。
verifyNoMoreInteractions(Object... mocks)
检查任何给定的mock对象上是否有任何未经验证的交互。
validateMockitoUsage()
验证测试代码中是否有书写错误的地方。
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 MockitoTest {
@InjectMocks
private Foo foo;
@Mock(lenient = true)
private Bar bar;
@Mock(lenient = true)
private Tou tou;
@Test
public void doReturnTest() {
Mockito.doReturn(7).when(bar).add(1, 2);
foo.sum(1, 2);
Mockito.verify(bar).add(1, 2);
Mockito.verify(bar, Mockito.times(1)).add(1, 2);
Mockito.verify(bar, Mockito.atLeast(1)).add(1, 2);
Mockito.verify(bar, Mockito.atLeastOnce()).add(1, 2);
Mockito.verify(bar, Mockito.atMost(1)).add(1, 2);
Mockito.verify(bar, Mockito.atMostOnce()).add(1, 2);
Mockito.verify(bar, Mockito.never()).badCode();
Mockito.verify(bar, Mockito.only()).add(1, 2);
Mockito.verifyNoInteractions(tou);
Mockito.verifyNoMoreInteractions(bar);
Mockito.validateMockitoUsage();
二:方法执行时间的验证
after(long millis)在给定的毫秒数后将触发验证,允许测试异步代码。
timeout(long millis)验证将一遍又一遍地触发,直到给定的毫秒数,允许测试异步代码。
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 MockitoTest {
@InjectMocks
private Foo foo;
@Mock(lenient = true)
private Bar bar;
@Mock(lenient = true)
private Tou tou;
@Test
public void doReturnTest() {
Mockito.doReturn(7).when(bar).add(1, 2);
foo.sum(1, 2);
Mockito.verify(bar, Mockito.after(100)).add(1, 2);
Mockito.verify(bar, Mockito.timeout(100)).add(1, 2);
更多关于timeout()方法的介绍:
验证将一遍又一遍地触发,直到给定的毫秒数,允许测试异步代码。当与mock对象的交互尚未发生时很有用。timeout()方法的广泛使用可能是一种代码异味——有更好的方法来测试并发代码。
另请参阅after(long)测试异步代码的方法。timeout()和after之间的差异在 after(long) 的 Javadoc.
verify(mock, timeout(100)).someMethod();
verify(mock, timeout(100).times(1)).someMethod();
verify(mock, timeout(100).times(2)).someMethod();
verify(mock, timeout(100).atLeast(2)).someMethod();
更多关于after(long)方法的介绍:
在给定的毫秒数后将触发验证,允许测试异步代码。当与mock对象的交互尚未发生时很有用。after()方法的广泛使用可能是一种代码异味——有更好的方法来测试并发代码。
尚未实现与 InOrder 验证一起使用。
另请参阅timeout(long)测试异步代码的方法。timeout()和之间的差异after()解释如下。
verify(mock, after(100)).someMethod();
verify(mock, after(100).times(1)).someMethod();
verify(mock, after(100).times(2)).someMethod();
verify(mock, after(100).never()).someMethod();
verify(mock, new After(100, yourOwnVerificationMode)).someMethod();
timeout() 与 after()
timeout() 验证通过后立即退出并成功
after() 等待完整的时间来检查验证是否通过
mock.foo();
verify(mock, after(1000)).foo();
mock.foo();
verify(mock, timeout(1000)).foo();
三:方法调用顺序验证
inOrder(Object... mocks)创建InOrder对象,以允许按顺序验证mock的对象。
calls(int wantedNumberOfInvocations)允许按顺序进行非贪婪调用的验证。
关于inOrder:
创建InOrder对象以允许按顺序验证模拟的对象。
InOrder inOrder = inOrder(firstMock, secondMock);
inOrder.verify(firstMock).add("was called first");
inOrder.verify(secondMock).add("was called second");
按顺序验证是灵活的 -您不必一一验证所有交互,而只需按顺序验证您感兴趣的那些交互。
此外,您可以创建 InOrder 对象,仅传递与有序验证相关的mock对象。
InOrder验证是“贪婪的”,但您几乎不会注意到它。如果您想了解更多信息,请阅读 此 wiki 页面。
从 Mockito 1.8.4 开始,您可以以顺序敏感的方式使用verifyNoMoreInteractions()。阅读更多:InOrder.verifyNoMoreInteractions()。
关于calls():
允许按顺序进行非贪婪验证。例如
inOrder.verify( mock, calls( 2 )).someMethod( "some arg" );
如果该方法被调用 3 次,则不会失败,与 times(2) 不同
与 atLeast(2) 不同,不会将第三次调用标记为已验证
这种验证方式只能用于顺序验证。
四:验证方法参考