卓越工程之单元测试在行权鉴权中的实践
前言
1. 全书内容比较枯燥乏味,虽然有部分代码示例,但是语言并不生动,让人坚持读下去就很难。
流程
1. 用户发起查询时,首先判断用户传入的参数中是否包含行权验证的字段,如果不包含则直接抛出异常,提示鉴权失败;
- 等值匹配(=)
- 前缀匹配(like xxx%)
- 后缀匹配(like %xxx)
- 模糊匹配(like %xxx%)
测试边界
撰写单元测试
<dependency><groupId>org.powermock</groupId><artifactId>powermock-core</artifactId><version>${powermock.version}</version><scope>test</scope></dependency><dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>${powermock.version}</version><scope>test</scope></dependency><dependency><groupId>org.powermock</groupId><artifactId>powermock-module-junit4</artifactId><version>${powermock.version}</version><scope>test</scope></dependency>
// 需要模拟的外部依赖@Mockprivate ArkDataSetReadService arkDataSetReadService;// 需要进行测试的类@InjectMocksprivate ComponentJobExecuteService componentJobExecuteService;
Response<RowPermissionQueryResponseDto> response = JSON.parseObject(permissionData, Response.class);Mockito.doReturn(response).when(arkDataSetReadService).getUserRowPermissions(911L, 1741141);
● 通过文本的方式构造模拟的返回值。
Map<String, Pair<String, List<String>>> filterParams = new HashMap<>();Whitebox.invokeMethod(componentJobExecuteService, "checkRowPermission", 911L, filterParams)
@Test(expected = AuthException.class)public void testRowPermission() throws Exception {ContextInfo contextInfo = new ContextInfo();contextInfo.setBucId(1741141);ContextInfoHolder.setContextInfo(contextInfo);Response<RowPermissionQueryResponseDto> response = JSON.parseObject(permissionData, Response.class);Mockito.doReturn(response).when(arkDataSetReadService).getUserRowPermissions(911L, 1741141);Map<String, Pair<String, List<String>>> filterParams = new HashMap<>();Whitebox.invokeMethod(componentJobExecuteService, "checkRowPermission", 911L, filterParams);}
总结
在实际撰写单元测试时,由于对工具的不熟悉担心写起来比较麻烦,所以一直没进行尝试,但是在实际操作的时候发现,在写单元测试的时候,其实也是对整个代码进行梳理的过程,是对自己写代码时思路的复盘和总结,单测不只是能验证代码执行的准确性,还能验证在写代码时的逻辑是否正确、能否满足业务的实际需求。 有了单测打底,接下来即使需要对这部分代码进行重构、迭代,也能做到心中有数,只需要在重构完成后执行下单测就可以轻松验证代码的准确性。 希望能够通过这次实践,能够让自己在写单测的路上坚持下去。
往期推荐
1. 聊一聊分布式锁的设计模型
工匠追求“术”到极致,其实就是在寻“道”,且离悟“道”也就不远了,亦或是已经得道,这就是“工匠精神”——一种追求“以术得道”的精神。如果一个工匠只满足于“术”,不能追求“术”到极致去悟“道”,那只是一个靠“术”养家糊口的工匠而已。作者根据多年来的实践探索,总结了大量的Java编码之“术”,试图阐述出心中的Java编码之“道”。
点击阅读原文查看详情。