共计 2523 个字符,预计需要花费 7 分钟才能阅读完成。
摘要: 置信每一个程序猿在写 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 依赖如下:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
代码中:import org.mockito.Mockito
2、创立 Mock 对象
这里须要留神的是 scala 中只能对伴生对象或者 Class 创立 mock 对象,不能间接对 Object 创立 mock 对象。Scala 中应用 Mockito.mock(classOf[…]) 来创立 mock 对象
class VpcClient {def getRouteTable(projectId: String, token: String, url: String): Seq[RouteTable] = {
val header = Map(RequestAttributes.X_AUTH_TOKEN -> token,
"Content-Type" -> MediaType.APPLICATION_JSON)
val response = restClient.get(url, header)
}
}
object VpcClient {private lazy val _instance: VpcClient = new VpcClient(conf)
private var mockClient: VpcClient = _
def getInstance(): VpcClient = {
// Keep original logic for other ut, which didn't set mock client.
if (RuntimeEnvironment.isTesting && null != mockClient) {return mockClient}
_instance
}
// only used for UT
def setMockClient(vpcClient: VpcClient): Unit = {mockClient = vpcClient}
}
举个例子,当初对 VpcClient 进行 mock,从而能够调用 VpcClient 外面的 getRouteTableList 办法。
class UtilSuite {val vpcClient = Mockito.mock(classOf[VpcClient])
VpcClient.setMockClient(vpcClient)
}
3、配置 Mock 对象
Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token,url)
当咱们有了一个 Mock 对象后, 咱们能够调用对象的办法,并且应用 Mockito.doReturn().when().method,来设置当调用 method 时,在某输出下返回某输入。这里的输出是要与 method 实在的入参统一的,输入也是要与 method 实在的返回参数统一。
class UtilSuite {val vpcClient = Mockito.mock(classOf[VpcClient])
VpcClient.setMockClient(vpcClient)
val projectId = "projectId"
val token = "token"
val url= "url"
val routeTableInfo = new RouteTableInfo
Mockito.doReturn(routeTableInfo).when(vpcClient).getRouteTable(projectId, token, url)
}
总结:
下面讲了 Mockito 的应用场景,以及 scala 中怎么应用 Mockito 创立 mock 对象。与 java 中应用 Mockito 有些许的差异,这些如果感兴趣的话都能够参考下官网文档:
- 官网:http://mockito.org
- API 文档:http://docs.mockito.googlecod…
- 我的项目源码:https://github.com/mockito/mo…
获取更多 AI 相干数据、算法、模型等 AI 资产,请点击“理解更多”,AI Gallery 等您!
点击关注,第一工夫理解华为云陈腐技术~