前言
断言是单测环节中非常重要的一个环节,但是又容易被忽视掉。大部分人只判断了结果有返回
/ 方法没报错
,就认为这个用例成功了。其实方法没报错这只是最基本的要求,而我们的 bug
往往也不是这种故障,而是里面的一些字段丢失或者有误。
注意项
- 结果对象的所有字段都要校验
- 用例中的某些对象虽然被 mock 了,但是这些 mock 的对象具体接收到了哪些参数,也需要详细的做校验。
如何校验 mock 对象的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
Assertions.assertThat(restResponse).hasFieldOrPropertyWithValue("code", 0);
new Verifications() { { SimpleDocVo vo; PipelineJobJunit document; EsClient.createDoc(vo = withCapture(), document = withCapture());
Assertions.assertThat(vo).extracting(simpleDocVo -> StringUtil.isNotEmpty(simpleDocVo.getId()));
Assertions.assertThat(document) .hasFieldOrPropertyWithValue("pipelineJobId", jenkinsJunitVo.getUapJobId()) .hasFieldOrPropertyWithValue("status", jenkinsJunitVo.getStatus()) .hasFieldOrPropertyWithValue("allCoverage", jenkinsJunitVo.getAllCoverage()) .hasFieldOrPropertyWithValue("newCoverage", jenkinsJunitVo.getNewCoverage()) .hasFieldOrPropertyWithValue("testRun", jenkinsJunitVo.getTestRun()) .hasFieldOrPropertyWithValue("testFailure", jenkinsJunitVo.getTestFailure()) .hasFieldOrPropertyWithValue("testSkipped", jenkinsJunitVo.getTestSkipped()); } };
|
上述代码的重点
捕捉 mock 对象的参数,赋值给某个变量,然后校验这个对象。
EsClient.createDoc(vo = withCapture(), document = withCapture());
效率问题
每个对象都校验代码很繁琐,感觉单测就是在写 get
,set
方法。