Bootstrap

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

重要性:★★★★☆

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

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 {
    }
}

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

1. 标签的语法规则

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

  • 标签不能是null或空字符串

  • 去除两端空白字符后的标签中不能包含空白字符(空格、制表符、回车、换行符等等)

  • 去除两端空白字符后的标签中不能包含ISO控制字符

  • 去除两端空白字符后的标签中不能包含下列的保留字符:,()&!|

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

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

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

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

        
          org.apache.maven.plugins
          maven-surefire-plugin
          2.22.2
          
            
              unit-test
              
                test
              
              test
              
                integration, acceptance
              
            
            
              integration-test
              
                test
              
              integration-test
              
                integration
              
            
          
          
            
              **/*
            
          
        

在上面的pom.xml的maven-surefire-plugin测试插件中,我们配置了两个,分别设置单元测试和集成测试。其中为的绑定到阶段,排除掉注解了或的测试。而为的绑定到阶段,只包含注解了的测试。这样,当执行maven构建流水线时,到达单元测阶段就会执行没有包含注解和注解的测试,到达集成测试阶段就会执行包含了注解的测试。

说明:

  • 元素定义要包含在测试中的标签。而元素定义要排除的标签。

  • 和元素都支持多个标签项,可以用逗号“”分隔各个标签项。

  • 可以使用Tag表达式来表达多个标签的组合。操作符包括、、和。例如表示包含那些被或注解、但没有被注解的测试。

  • 和可以同时使用。例如:

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

在文件的节中定义类似下面的内容:

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

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

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