我是靠谱客的博主 美好钢笔,最近开发中收集的这篇文章主要介绍原创 | TDD工具集:JUnit、AssertJ和Mockito (十七)编写测试-标签和过滤,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述
在这里插入图片描述

重要性:★★★★☆

测试类和测试方法可以用@Tag注解打标签,这些标签随后可用于在测试发现和执行中作为测试筛选条件。

package yang.yu.tdd.tags;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Tags;
import org.junit.jupiter.api.Test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Tag("fast")
@Tag("model")
public class TagDemo {
@Test
@Tag("taxes")
void testingTaxCalculation() {
}
@Test
@IntegrationTest
void aIntegrationTest() {
}
@Test
@Tags( {
@Tag("fast"),
@Tag("model")
})
void testWithTags() {
}
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Tag("IntegrationTest")
@interface IntegrationTest {
}
}

可以对同一个测试方法或测试类多次声明@Tag注解,也可以通过@Tags组合多个标签。

1. 标签的语法规则

@Tag注解里面的标签值必须遵守下面的规则:

  • 标签不能是null或空字符串
  • 去除两端空白字符后的标签中不能包含空白字符(空格、制表符、回车、换行符等等)
  • 去除两端空白字符后的标签中不能包含ISO控制字符
  • 去除两端空白字符后的标签中不能包含下列的保留字符:
    • ,
    • (
    • )
    • &
    • !
    • |

标签两端如果有空白字符(空格、制表符、回车、换行符等等),将被自动去除。

2. 在构建系统中根据标签过滤测试

2.1 在Maven中根据标签过滤测试

例如,为了将快速的单元测试和慢速的集成测试分开,我们分别用@Tag("Unit")@Tag("Integration")来注解它们。在Maven中,我们可以配置surefire插件来分别筛选单元测试和集成测试。


<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<executions>
<execution>
<id>unit-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>test</phase>
<configuration>
<excludedGroups>integration, acceptance</excludedGroups>
</configuration>
</execution>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<groups>integration</groups>
</configuration>
</execution>
</executions>
<configuration>
<includes>
<include>**/*</include>
</includes>
</configuration>
</plugin>

在上面的pom.xml的maven-surefire-plugin测试插件中,我们配置了两个execution,分别设置单元测试和集成测试。其中idunit-testexecution绑定到test阶段,排除掉注解了@Tag("integration")@Tag("acceptance")的测试。而idintegration-testexecution绑定到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>可以同时使用。例如:

    <groups>A, !B</groups>
    

    和下面的配置等价:

    <groups>A</groups>
    <excludedGroups>B</excludedGroups>
    

2.2 在Gradle中根据标签过滤测试

build.gradle文件的test节中定义类似下面的内容:

test {
useJUnitPlatform {
includeTags 'fast', 'smoke & feature-a'
// excludeTags 'slow', 'ci'
includeEngines 'junit-jupiter'
// excludeEngines 'junit-vintage'
}
}

标签表达式和Maven中的相同。

这一节我们就分享到这里,下一节我们讲“编写测试的测试执行顺序”。

在这里插入图片描述
在这里插入图片描述

最后

以上就是美好钢笔为你收集整理的原创 | TDD工具集:JUnit、AssertJ和Mockito (十七)编写测试-标签和过滤的全部内容,希望文章能够帮你解决原创 | TDD工具集:JUnit、AssertJ和Mockito (十七)编写测试-标签和过滤所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部