《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(2) https://developer.aliyun.com/article/1232244?groupCode=java
三、 简化验证数据对象
1. 利用JSON序列化简化数据对象验证语句
利用JSON反序列化,可以简化大量的数据对象验证语句。首先,加载JSON资源文件为JSON字符串;然后,通过JSON序列化数据对象(方法返回值或方法参数值)为JSON字符串;最后,再验证两个JSON字符串是否一致。
原始用例:
简化用例:
小知识点:
• 如果数据对象中存在Map对象,为了保证序列化后的字段顺序一致,需要添加SerializerFeature.MapSortField特征。
• 如果数据对象中存在随机对象,比如时间、随机数等,需要使用过滤器过滤这些字段。
排除所有类的属性字段:
排除单个类的属性字段:
排除多个类的属性字段:
2. 利用数据对象相等简化返回值验证语句
在用Assert.assertEquals方法验证返回值时,可以直接指定基础类型值或数据对象实例。当数据对象实例不一致时,只要其数据对象相等(equals比较返回true),Assert.assertEquals方法也会认为其是相等的。所以,可以利用数据对象相等来替换JSON字符串验证,从而简化测试方法返回值验证语句。
原始用例:
简化用例:
小知识点:
• Assert.assertSame用于相同类实例验证——类实例相同;
• Assert.assertEquals用于相等类实例验证——类实例相同或相等(equals为true)。
注意:
这里不建议为了使用这个功能而重载equals方法,只建议针对相同或已重载equals方法的类实例使用。而针对未重载equals方法的类实例,建议转化为JSON字符串后再验证。
3. 利用数据对象相等简化参数值验证语句
在用Mockito.verify方法验证依赖方法参数时,可以直接指定基础类型值或数据对象实例。当数据对象实例不一致时,只要其数据对象相等(equals比较返回true),Mockito.verify方法也会认为其是相等的。所以,可以利用数据对象相等来替换ArgumentCaptor参数捕获,从而简化依赖方法参数值验证语句。
原始用例:
简化用例:
注意:
这里不建议为了使用这个功能而重载equals方法,只建议针对相同或已重载equals方法的类实例使用。而针对未重载equals方法的类实例,建议先捕获参数转化为JSON字符串后再验证。
《Java单元测试实战》——简化技巧:Java编程技巧之单元测试用例简化方法(4) https://developer.aliyun.com/article/1232242?groupCode=java