之前的工作中对业务接口的测试仅仅停留在postman请求一下,验证一下接口是否出现异常而已,单元测试基本属于空白,新工作中对单元测试的要求较高,于是在完成接口的代码之外还需要完成相应的单元测试,在单元测试中为避免第三方接口对测试结果的影响,遂使用了Mockito,在这样的情况下结识了Mockito。
Mockito的应用场景如上所述,而官网肯定会对自己的框架大肆夸赞一番,可以写出更加优美的测试代码,可阅读性高的测试代码以及清晰的验证错误结果云云,这些在使用Mockito时都可以自己感受,也可以点击跳转Mockito官网亲自喝下这碗官网鸡汤。
Mockito的使用也十分简单,只要引入mockito-core的jar包就可以使用,建议配上junit食用效果更佳,接下来展示两个Mockito的基本使用例子作为此章节的结束。
- verify基本使用
在使用Mockito之前先引入Mockito相关方法
import static org.mockito.Mockito.*;
@Test
public void simpleVerifyTest() {
// create a mock of List
List mockList = mock(List.class);
// call add and clear method of mocked List
mockList.add("123");
mockList.clear();
// verify interaction of mocked List
verify(mockList).add("123");
verify(mockList).clear();
}
verify可以验证被mock的对象是否进行了相应的操作,如果未进行相应的操作会抛出异常,例如将verify(mockList).add("123")
修改为verify(mockList).add("12")
将会获得如下错误信息。
- 基本的stubbing
@Test
public void simpleStubbingTest() {
// create a mock of ArrayList
ArrayList mockList = mock(ArrayList.class);
// stubbing
when(mockList.get(0)).thenReturn("first element");
when(mockList.get(1)).thenThrow(new RuntimeException("mockList.get(1)"));
// prints "first element"
System.out.println(mockList.get(0));
// throws RuntimeException
System.out.println(mockList.get(1));
// prints null
System.out.println(mockList.get(999));
verify(mockList).get(0);
}
其实从代码上也看得出,所谓的stubbing其实就是对被mock对象的相应操作配置了相应的影响,当被mock对象进行相应操作时就会得到相应的响应,当mock对象的操作没有被stubbing时调用相应操作会返回适当的默认值。
另外对已经被stubbing的操作是不推荐使用verify的,因为使用verify意味着对操作的结果是不关心的,那相应操作就没必要进行stubbing,如果对操作的结果关注,那操作结果肯定在verify之前已经获得,也就没有必要使用verify了。
本章节代码可以点击跳转GitHub查看
网友评论