原创 | TDD 工具集:JUnit、AssertJ 和 Mockito (十七) 编写测试 - 标签和过滤



重要性:★★★★☆
测试类和测试方法可以用@Tag
注解打标签,这些标签随后可用于在测试发现和执行中作为测试筛选条件。
可以对同一个测试方法或测试类多次声明@Tag
注解,也可以通过@Tags
组合多个标签。
1. 标签的语法规则
@Tag
注解里面的标签值必须遵守下面的规则:
标签不能是null或空字符串
去除两端空白字符后的标签中不能包含空白字符(空格、制表符、回车、换行符等等)
去除两端空白字符后的标签中不能包含ISO控制字符
去除两端空白字符后的标签中不能包含下列的保留字符:,()&!|
标签两端如果有空白字符(空格、制表符、回车、换行符等等),将被自动去除。
2. 在构建系统中根据标签过滤测试
2.1 在Maven中根据标签过滤测试
例如,为了将快速的单元测试和慢速的集成测试分开,我们分别用@Tag("Unit")
和@Tag("Integration")
来注解它们。在Maven中,我们可以配置surefire插件来分别筛选单元测试和集成测试。
在上面的pom.xml的maven-surefire-plugin测试插件中,我们配置了两个execution
,分别设置单元测试和集成测试。其中id
为unit-test
的execution
绑定到test
阶段,排除掉注解了@Tag("integration")
或@Tag("acceptance")
的测试。而id
为integration-test
的execution
绑定到integration-test
阶段,只包含注解了@Tag("integration")
的测试。这样,当执行maven构建流水线时,到达单元测阶段就会执行没有包含注解@Tag("integration")
和@Tag("acceptance")
注解的测试,到达集成测试阶段就会执行包含了@Tag("integration")
注解的测试。
说明:
<groups>
元素定义要包含在测试中的标签。而<excludedGroups>
元素定义要排除的标签。<groups>
和<excludedGroups>
元素都支持多个标签项,可以用逗号“,
”分隔各个标签项。可以使用Tag表达式来表达多个标签的组合。操作符包括
&
、|
、!
和()
。例如<groups>(A | B) & !C</groups>
表示包含那些被@Tag("A")
或@Tag("B")
注解、但没有被@Tag("A")
注解的测试。<groups>
和<excludedGroups>
可以同时使用。例如:
2.2 在Gradle中根据标签过滤测试
在build.gradle
文件的test
节中定义类似下面的内容:
标签表达式和Maven中的相同。
这一节我们就分享到这里,下一节我们讲“编写测试的测试执行顺序”。


版权声明: 本文为 InfoQ 作者【编程道与术】的原创文章。
原文链接:【http://xie.infoq.cn/article/c14c99339d0b5f487be247745】。文章转载请联系作者。
评论