Mockito
Mockito是一个用于Java单元测试的流行框架,用于模拟和验证对象的行为。它可以帮助你编写更简洁、可靠的单元测试,尤其适用于模拟外部依赖或协作对象。
以下是使用Mockito的一些常见操作:
1、创建模拟对象(Mock Objects)
// 创建一个接口的模拟对象
MyInterface myMock = Mockito.mock(MyInterface.class);
// 创建一个具体类的模拟对象
MyClass myMock = Mockito.mock(MyClass.class);
2、设置模拟对象的行为:
// 模拟方法调用并返回特定值
Mockito.when(myMock.someMethod()).thenReturn(someValue);
// 模拟方法调用并抛出异常
Mockito.when(myMock.someMethod()).thenThrow(new SomeException());
// 模拟void方法
Mockito.doNothing().when(myMock).voidMethod();
3、验证模拟对象的方法调用:
// 验证方法被调用了几次
Mockito.verify(myMock, Mockito.times(1)).someMethod();
// 验证方法从未被调用
Mockito.verify(myMock, Mockito.never()).someMethod();
// 验证方法至少被调用一次
Mockito.verify(myMock, Mockito.atLeastOnce()).someMethod();
4、参数匹配:
// 使用任意参数匹配
Mockito.when(myMock.someMethod(Mockito.anyString())).thenReturn(someValue);
// 使用自定义参数匹配
Mockito.when(myMock.someMethod(Mockito.argThat(arg -> arg > 10))).thenReturn(someValue);
5、回调和捕获参数:
// 使用回调方式处理模拟方法的参数
Mockito.doAnswer(invocation -> {
Object arg = invocation.getArgument(0);
// do something with arg
return null;
}).when(myMock).someMethod(Mockito.any());
// 捕获模拟方法的参数值
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
Mockito.verify(myMock).someMethod(captor.capture());
String capturedValue = captor.getValue();
以上只是Mockito的一些基本用法示例,Mockito还提供了更多的功能和特性,例如Spy(部分模拟)、注解支持、重置模拟对象等