current position:Home>Spring boot unit test (III) @ tag

Spring boot unit test (III) @ tag

2022-01-27 00:15:18 Java Xiaohai

Preface

Spring Boot Use JUnit5 Provided @Tag Annotations label test classes or methods , So as to filter according to the label when performing the test .

One 、 Label naming rules

  1. No space is allowed around the tag name , When you perform a test, you do trim Handle ;
  2. The tag name cannot use the following characters :()&|!,.

Two 、 Basic usage

  1. Define a unit test class , Add a note to the class test-1, Two test methods are defined , Add labels separately level-1 and level-2.
package com.example.demo;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("test-1")
public class UnitTest1 {

    @Test
    @Tag("level-1")
    public void test1() {
        System.out.println("Test 1-1");
    }

    @Test
    @Tag("level-2")
    public void test2() {
        System.out.println("Test 1-2");
    }
}
 Copy code 
  1. Define another unit test class , Add tags to the class test-2, Two test methods are also defined , Add labels separately level-1 and level-2.
package com.example.demo;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag("test-2")
public class UnitTest2 {

    @Test
    @Tag("level-1")
    public void test1() {
        System.out.println("Test 2-1");
    }

    @Test
    @Tag("level-2")
    public void test2() {
        System.out.println("Test 2-2");
    }
}
 Copy code 
  1. Perform the following Maven command , Observe the corresponding test execution process .
mvn clean test -Dgroups=test-1
mvn clean test -Dgroups=test-2
mvn clean test -Dgroups=level-1
mvn clean test -Dgroups=level-2
 Copy code 
  1. In addition to using Maven The command executes the tag filter test , It can also be configured through surefire The plug-in performs tag filtering tests .(surefire It's a test engine )
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <groups>level-1</groups>
        <includes>*Test*.java</includes>
    </configuration>
</plugin>
 Copy code 

3、 ... and 、 Tag expression

In the above basic use methods of labels , Only one tag can be specified for each test , If you want to implement more complex label filtering, you need to use label expressions , That is, through And (&) or (|) Not (!) Three operators connect labels .

Corresponding Maven Command format :

mvn clean test -Dgroups='test-1 & level-1'
 Copy code 

surefire Configuration format :

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <groups>test-1 | level-2</groups>
        <includes>*Test*.java</includes>
    </configuration>
</plugin>
 Copy code 

Four 、 Custom label annotation

  1. Custom label annotation
package com.example.demo;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("level-1")
public @interface Level1 {
}
 Copy code 
  1. take @Tag Replace comments with custom comments
@Test
@Level1
public void test1() {
    System.out.println("Test 1-1");
}
 Copy code 
  1. It can be further simplified , take @Test Add custom tag comments .
package com.example.demo;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Test
@Tag("level-1")
public @interface Level1 {
}
 Copy code 
  1. The test method only uses custom tag annotations .
@Level1
public void test1() {
    System.out.println("Test 1-1");
}

copyright notice
author[Java Xiaohai],Please bring the original link to reprint, thank you.
https://en.cdmana.com/2022/01/202201270015144015.html

Random recommended