Junit5常用注解

Junit5的构成:

  • Junit Platform+Junit Jupiter+Junit Vintage
  • Junit Platform:是Junit向测试平台演进,提供平台功能的模块,通过这个其他的自动化引擎可以接入Junit,实现对接和执行
  • Junit Jupiter:核心,承载Juint4原有功能+丰富的新特性
  • Junit Vintage:主要功能是对Juint旧版本进行兼容

一,导入依赖

 <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <junit-platform.version>1.8.1</junit-platform.version>
        <junit-jupiter.version>5.8.1</junit-jupiter.version>
    </properties>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M5</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.junit.jupiter</groupId>
                            <artifactId>junit-jupiter-engine</artifactId>
                            <version>5.8.1</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <includes>
                            <include>**/*Test.java</include>
                        </includes>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
  <!--核心依赖-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.8.1</version>
        </dependency>
        <!--套件测试使用-->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.8.1</version>
        </dependency>

二,编写测试case

@DisplayName("常用注解测试")
public class TestCase {
    /**
     * @BeforeAll和@AfterAll 必须静态修饰,在所有方法执行前后只执行一次
     * @Test 一个方法
     * @AfterEach和@BeforeEach 每次方法执行前都会执行一次
     * @DisplayName() 类似注解的功能
     * @RepeatedTest(5) 重复5次
     * @Disabled 不执行该方法
     * @Tags 打标签
     */
    @BeforeAll
    public static void beforeAll() {
        System.out.println("BeforeAll再每个类中只执行一次,且是在开头执行");
    }

    @BeforeEach
    public void beforeEach() {
        System.out.println("BeforeEach在每个方法执行前都会执行一次");
    }

    // junit5不需要访问修饰符
    //  @Disabled表示不执行
    @Test
    @Disabled
    @DisplayName("方法1")
    void fun1() {
        System.out.println("---fun1---");
    }

    @Test
    @DisplayName("方法2")
    @RepeatedTest(5)
    void fun2() {
        System.out.println("---fun2---");
    }

    @Test
    @Tag("tag1")
    void tagTest(){
        System.out.println("tag1");
    }
    @AfterEach
    public void afterEach() {
        System.out.println("AfterEach在每个方法执行前都会执行一次");
    }

    @AfterAll
    public static void afterAll() {
        System.out.println("afterAll再每个类中只执行一次,且是在结尾执行");
    }
}

/**
 * @Nested:
 * 功能类似于suite测试套件
 * 从下往上执行
 */

public class NestedTest {
    private static HashMap<String, Object> dataMap = new HashMap<String, Object>();

    @Test
    void login() {
        dataMap.put("login", "登录成功");
    }

    @Nested
    class Shopping{
        @Test
        void shopping(){
            if (null!=dataMap.get("buy")){
                System.out.println("购买成功啦!");
            }else {
                System.out.println("购买失败");
            }
        }
    }

    @Nested
    class Buy {
        @Test
        void buyTest() {
            if (dataMap.get("login").equals("登录成功")) {
                System.out.println("登录成功");
                dataMap.put("buy", "登录成功,快去购物吧!");
            } else {
                System.out.println("登录失败");
            }
        }
    }
}
/**
 * SelectPackages 选择需要执行的包
 */
@RunWith(JUnitPlatform.class)
@SelectPackages({"com.testCase2"})
public class SelectPackagesTest {

}
/**
 * @IncludePackages需要和@SelectPackages搭配使用
 * @IncludePackages是在@SelectPackages的基础上再做一层筛选
 * ps:一定要注意,包下的类名一定要Test开头或者结尾,否则就不执行了!!!
 */
@RunWith(JUnitPlatform.class)
@SelectPackages({"com.testCase2"})
// 只执行com.testCase2.demo1
@IncludePackages({"com.testCase2.demo1"})
public class IncludePackagesTest {
}
/**
 * @SelectClasses和@IncludeTags组合使用,在方法里选出对应的标签
 * 还有@ExcludeTag
 */
@RunWith(JUnitPlatform.class)
@SelectClasses({TestCase.class})
//@IncludeTags("tag1")
@ExcludeTags("tag1")
public class SelectClassesTest {
}

你可能感兴趣的:(自动化测试,自动化测试,单元测试)