@levinzhang
2022-10-01T09:38:09.000000Z
字数 2581
阅读 337
by
JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。
JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。
JUnit 5.4引入了@TempDir注解,允许在单元测试中自动创建和删除文件。在下面的例子中展示了如何创建JavaVersions.txt文件,它将会在测试结束后自动删除:
@Test
public void tmpDir(@TempDir Path tempDir) throws IOException {
Path file = tempDir.resolve("JavaVersions.txt");
List<String> versions = Arrays.asList("17", "18", "19");
Files.write(file, versions);
assertEquals(versions, Files.readAllLines(file));
}
JUnit现在允许通过CleanupMode枚举常量为@TempDir
注解设置清理策略,包括:ALWAYS
、DEFAULT
、NEVER
和ON_SUCCES
。其中,CleanupMode.ALWAYS
是默认的清理策略,在声明注解的时候,可以将其变更为CleanupMode.NEVER
:
@TempDir(cleanup = CleanupMode.NEVER)
在运行测试之后,临时文件会依然存在于一个含有随机数字的目录中,比如:
/tmp/junit8656612856066491205/JavaVersions.txt
在该版本之后,XML报告将会以开放测试报告(Open Testing Reporting)的格式进行存储,该格式与任何具体的测试框架或编程语言无关。新的测试结果格式能够让工具开发人员更易于解析测试报告,不必针对每种测试框架特有的测试结果格式编写解析器。
新引入的IterationSelector类允许用户在IDE中为参数化的测试选择特定的迭代。在目前流行的IDE中,如IntelliJ,会显示一个绿色的箭头,允许使用所有的参数重新运行整个测试:
现在,有一个open状态的问题已经提交到了YouTrack(JetBrains的问题跟踪器)中,提议添加对IterationSelector
类的支持。它的建议方式是为参数化测试的每个值添加一个箭头,这样的话,就能基于某个参数值运行测试,而不必针对所有的参数运行测试。
ConsoleLauncher是一个用于运行JUnit平台的命令行Java应用。我们现在可以使用--single-color
参数改变输出风格,它只会显示没有颜色的文本属性,我们还可以使用--color-palette=FILE
选择自定义的ANSI风格的输出。新引入的--list-engines
参数会显示出所有可用的测试引擎。
当没有找到测试时,@Suite的新failIfNoTests
属性会使整个测试套件(suite)失败。
在测试实例创建之前应调用的Extensions现在可以使用TestInstancePreConstructCallback接口定义,它对应于现有的TestInstancePreDestroyCallback接口。
现在,我们能够使用@EnabledOnOs和@DisabledOnOs注解基于操作系统启用或禁用测试,目前包含了对FreeBSD和OpenBSD的支持:
@Test
@EnabledOnOs({OS.FREEBSD, OS.OPENBSD})
@MethodSource注解使用的工厂方法现在可以使用ParameterResolver扩展解析得到的参数:
@RegisterExtension
static final AnswerResolver answerResolver = new AnswerResolver();
@ParameterizedTest
@MethodSource("factoryMethod")
void testAnswers(String answer) {
assertTrue(answer.startsWith("42"));
}
static Stream<Arguments> factoryMethod(Integer answer) {
return Stream.of(
arguments(answer + " is the answer to life, the universe, and everything"),
arguments(answer + " is also the answer to this questions")
);
}
static class AnswerResolver implements ParameterResolver {
@Override
public boolean supportsParameter(ParameterContext parameterContext,
ExtensionContext extensionContext) {
return parameterContext.getParameter().getType() == Integer.class;
}
@Override
public Object resolveParameter(ParameterContext parameterContext,
ExtensionContext extensionContext) {
return 42;
}
}
JUnit 5.9.1引入了@EnabledInNativeImage和@DisabledInNativeImage注解,以便在GraalVM原生镜像中运行时启用或禁用标注的测试。
JUnit 5文档提供了关于新功能、缺陷修复和废弃功能的完整概述。