关于单元测试的那些事儿,Mockito 都能帮你解决
摘要:相信每一个程序猿在写 Unit Test 的时候都会碰到一些令人头疼的问题:如何测试一个 rest 接口;如何测试一个包含客户端调用服务端的复杂方法;如何测试一个包含从数据库读取数据的复杂方法。。。这些问题 mockito 都可以帮我们轻松地解决。Mockito 是啥?Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外...
本文分享自华为云社区《mockito——让你轻松地进行单元测试的强大工具》,作者:数据湖爱好者。
相信每一个程序猿在写 Unit Test 的时候都会碰到一些令人头疼的问题:如何测试一个 rest 接口;如何测试一个包含客户端调用服务端的复杂方法;如何测试一个包含从数据库读取数据的复杂方法。。。这些问题 Mockito 都可以帮我们轻松地解决。
Mockito 是啥?
Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象, 进而简化有外部依赖的类的测试。简单来说,创建 mock 对象之后,这个对象里面的方法是怎么实现的可以不用去关心,我们只需要给这个方法定义一个输入、输出即可。
什么情况下使用 Mockito
假设现在要测试 method A, method A 里面又依赖 Method B、Method C、Method D,而依赖的这 3 个 method 又不好去构建(如 ObsClient 需要真实 AK SK,HttpClient 需要构建客户端与服务器,Database 相对好构建,但是假设 Method C 只是从 table1、table2 联合查询,你还得分别往 table1、table2 insert 数据,很繁琐),这时候可以考虑 Mockito 进行优雅测试,当然如果你想去构建真实的测试场景,未免有点舍本逐末了~~~
Mockito 的使用
1、引进依赖
Maven 依赖如下:
代码中:import org.mockito.Mockito
2、创建 Mock 对象
这里需要注意的是 scala 中只能对伴生对象或者 Class 创建 mock 对象,不能直接对 Object 创建 mock 对象。Scala 中使用 Mockito.mock(classOf[…])来创建 mock 对象
举个例子,现在对 VpcClient 进行 mock,从而可以调用 VpcClient 里面的 getRouteTableList 方法。
3、配置 Mock 对象
当我们有了一个 Mock 对象后, 我们可以调用对象的方法,并且使用 Mockito.doReturn().when().method,来设置当调用 method 时,在某输入下返回某输出。这里的输入是要与 method 真实的入参一致的,输出也是要与 method 真实的返回参数一致。
总结
上面讲了 Mockito 的使用场景,以及 scala 中怎么使用 Mockito 创建 mock 对象。与 java 中使用 Mockito 有些许的差别,这些如果感兴趣的话都可以参考下官方文档:
获取更多 AI 相关数据、算法、模型等 AI 资产,请点击“了解更多”,AI Gallery 等您!
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/90150f4fc082d446f20c194f6】。文章转载请联系作者。
评论