霍格沃兹测试开发

JUnit5 显示名称

ceshiren.com

霍格沃兹测试学社

什么是显示名称

  • 相当于给用例起别名。
  • 可以展示在 IDE、报告中。
  • 可以配合其他注解使用。

为什么要使用显示名称

  • IDE 执行或者报告执行的名称默认和方法名还有类名对应
  • 显示名称可以起到更好辨识、更简洁的效果

如何定义一个显示名称

package com.hogwarts.JUnit5;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class DisplayNameTest {
    // 通过DisplayName注解定义
    @DisplayName("第一条用例")
    @Test
    void FirstCase(){
        System.out.println("第一条用例");
    }
    @DisplayName("第二条用例")
    @Test
    void SecondCase(){
        System.out.println("第二条用例");
    }
}

DisplayName 生成器(进阶)

  • 通过注解 @DisplayNameGenerator 实现生成器。
  • 通过配置文件配置。

DisplayName 生成器配置

生成器配置 含义 案例
Standard 默认配置 hogwarts_test() -> hogwarts_test()
Simple 删除没有参数的方法的尾括号。 hogwarts_test() -> hogwarts_test
ReplaceUnderscores 用空格替换下划线。 hogwarts_test() -> hogwarts test()
IndicativeSentences 使用类名,方法名。 类名,hogwarts_test()

Standard-默认配置

package com.hogwarts.JUnit5;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
// 默认配置,不会有变化
@DisplayNameGeneration(DisplayNameGenerator.Standard.class)
public class DisplayNameTest {
    @Test
    void First_Case(){
        System.out.println("第一条用例");
    }
    @Test
    void Second_Case(){
        System.out.println("第二条用例");
    }
}

Simple-删除没有参数的方法的尾括号

package com.hogwarts.JUnit5;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
// 删除没有参数的方法的括号
@DisplayNameGeneration(DisplayNameGenerator.Simple.class)
public class DisplayNameTest {
    @Test
    void First_Case(){
        System.out.println("第一条用例");
    }
    //参数化操作
    @ParameterizedTest()
    @ValueSource(strings = { "霍格沃兹测试开发" })
    void Second_Case(String name){
        System.out.println(name);
        System.out.println("第二条用例");
    }
}

ReplaceUnderscores-使用空格替换下划线

package com.hogwarts.JUnit5;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
// 下划线 ‘_’ 替换成空格
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
public class DisplayNameTest {
    @Test
    void First_Case(){
        System.out.println("第一条用例");
    }
    @Test
    void Second_Case(){
        System.out.println("第二条用例");
    }
}

IndicativeSentences-将类名和方法名拼接展示

package com.hogwarts.JUnit5;
import org.junit.jupiter.api.DisplayNameGeneration;
import org.junit.jupiter.api.DisplayNameGenerator;
import org.junit.jupiter.api.Test;
// 将类名和方法名拼接展示
@DisplayNameGeneration(DisplayNameGenerator.IndicativeSentences.class)
public class DisplayNameTest {
    @Test
    void First_Case(){
        System.out.println("第一条用例");
    }
    @Test
    void Second_Case(){
        System.out.println("第二条用例");
    }
}

配置参数

  • 问题:每一个类都需要添加配置信息,如果所有的测试类都添加,会有很多冗余代码

  • 解决方案:利用属性文件junit-platform.properties全局配置

如何配置

  1. 在路径 src/test/resources/junit-platform.properties中添加配置文件。
  2. 在配置文件中添加对应的配置属性。(以displayName 为例)
# 全局配置Display name 为连接类名与方法名
junit.jupiter.displayname.generator.default = \
org.junit.jupiter.api.DisplayNameGenerator$IndicativeSentences

显示名称配置优先级

优先级 配置内容
第一 注解@DisplayName
第二 注解@DisplayNameGeneration
第三 配置文件中配置DisplayNameGenerator
第四 使用默认配置org.junit.jupiter.api.DisplayNameGenerator.Standard