@levinzhang
2022-10-01T01:38:09.000000Z
字数 2581
阅读 814
by
JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。
JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。
JUnit 5.4引入了@TempDir注解,允许在单元测试中自动创建和删除文件。在下面的例子中展示了如何创建JavaVersions.txt文件,它将会在测试结束后自动删除:
@Testpublic 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扩展解析得到的参数:
@RegisterExtensionstatic 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 {@Overridepublic boolean supportsParameter(ParameterContext parameterContext,ExtensionContext extensionContext) {return parameterContext.getParameter().getType() == Integer.class;}@Overridepublic Object resolveParameter(ParameterContext parameterContext,ExtensionContext extensionContext) {return 42;}}
JUnit 5.9.1引入了@EnabledInNativeImage和@DisabledInNativeImage注解,以便在GraalVM原生镜像中运行时启用或禁用标注的测试。
JUnit 5文档提供了关于新功能、缺陷修复和废弃功能的完整概述。
