[关闭]
@levinzhang 2022-10-01T09:38:09.000000Z 字数 2581 阅读 337

JUnit 5.9引入对GraalVM原生镜像的支持

by

摘要:

JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。


JUnit 5.9解决了各种缺陷并引入了一些新的特性,比如执行测试后保留临时文件的能力。新的注解提供了在GraalVM原生镜像中启动或禁用特定测试的能力。现在,XML报告会存储为开放测试报告(Open Testing Reporting)格式。

JUnit 5.4引入了@TempDir注解,允许在单元测试中自动创建和删除文件。在下面的例子中展示了如何创建JavaVersions.txt文件,它将会在测试结束后自动删除:

  1. @Test
  2. public void tmpDir(@TempDir Path tempDir) throws IOException {
  3. Path file = tempDir.resolve("JavaVersions.txt");
  4. List<String> versions = Arrays.asList("17", "18", "19");
  5. Files.write(file, versions);
  6. assertEquals(versions, Files.readAllLines(file));
  7. }

JUnit现在允许通过CleanupMode枚举常量为@TempDir注解设置清理策略,包括:ALWAYSDEFAULTNEVERON_SUCCES。其中,CleanupMode.ALWAYS是默认的清理策略,在声明注解的时候,可以将其变更为CleanupMode.NEVER

  1. @TempDir(cleanup = CleanupMode.NEVER)

在运行测试之后,临时文件会依然存在于一个含有随机数字的目录中,比如:

  1. /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的支持

  1. @Test
  2. @EnabledOnOs({OS.FREEBSD, OS.OPENBSD})

@MethodSource注解使用的工厂方法现在可以使用ParameterResolver扩展解析得到的参数:

  1. @RegisterExtension
  2. static final AnswerResolver answerResolver = new AnswerResolver();
  3. @ParameterizedTest
  4. @MethodSource("factoryMethod")
  5. void testAnswers(String answer) {
  6. assertTrue(answer.startsWith("42"));
  7. }
  8. static Stream<Arguments> factoryMethod(Integer answer) {
  9. return Stream.of(
  10. arguments(answer + " is the answer to life, the universe, and everything"),
  11. arguments(answer + " is also the answer to this questions")
  12. );
  13. }
  14. static class AnswerResolver implements ParameterResolver {
  15. @Override
  16. public boolean supportsParameter(ParameterContext parameterContext,
  17. ExtensionContext extensionContext) {
  18. return parameterContext.getParameter().getType() == Integer.class;
  19. }
  20. @Override
  21. public Object resolveParameter(ParameterContext parameterContext,
  22. ExtensionContext extensionContext) {
  23. return 42;
  24. }
  25. }

JUnit 5.9.1引入了@EnabledInNativeImage@DisabledInNativeImage注解,以便在GraalVM原生镜像中运行时启用或禁用标注的测试。

JUnit 5文档提供了关于新功能、缺陷修复和废弃功能的完整概述

查看英文原文:JUnit 5.9 Supports GraalVM Native Image

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注