首页 > 编程问题  > 

JUnit、4、5、木星、复古

JUnit、4、5、木星、复古
JUnit 5 的发布简化了将此库集成到项目中,因为无需从 JUnit 4 迁移。然而,在一个同时使用 JUnit 5 和 4 的大型项目中,这种共存可能会带来混淆和维护困难。为了解决这个问题,本文建议采取以下步骤:告知团队 JUnit 5 的新特性,鼓励使用 JUnit 5 编写新测试,并在删除 JUnit 4 时遵循童子军规则。此外,本文探讨了 JUnit 5 中的显著更改,包括注释、方法和测试配置的更新,以及新的 @ParameterizedTest 注释。最后,文章强调了排除依赖项、创建
junit 5 的发布简化了将此库集成到项目中,因为无需从 junit 4 迁移。然而,在一个同时使用 junit 5 和 4 的大型项目中,这种共存可能会带来混淆和维护困难。为了解决这个问题,本文建议采取以下步骤:告知团队 junit 5 的新特性,鼓励使用 junit 5 编写新测试,并在删除 junit 4 时遵循童子军规则。此外,本文探讨了 junit 5 中的显著更改,包括注释、方法和测试配置的更新,以及新的 @parameterizedtest 注释。最后,文章强调了排除依赖项、创建配置类和使用 openrewrite 自动重构源代码的重要性,以帮助迁移到 junit 5 并保持项目最新。

JUnit 5发布后,很多开发人员只是将这个很棒的新库添加到他们的项目中,因为与其他版本不同,在这个新版本中,不需要从 JUnit 4 迁移到 5,只需包含新库即可在您的项目中,通过 JUnit 5 的所有引擎,您可以使用 JUnit 5 进行新测试,而使用 JUnit 4 或 3 的旧测试将继续运行,不会出现问题。 

但是,在一个大项目中,一个 10 年前构建的项目,两个版本的 JUnit 并行运行,会发生什么呢?

新的开发人员已经开始参与该项目,其中一些有 JUnit 经验,另一些则没有。新测试是使用 JUnit 5 创建的,新测试是使用 JUnit 4 创建的,在某些时候,开发人员在不知情的情况下,当他们在已创建的 JUnit 5 测试中创建新场景时,他们只包含 JUnit 4 注释,并且测试变成了混合体,一些@Test是 JUnit 4,一些@Test是 JUnit 5,而且每天都更难删除 JUnit 4 库。  

那么,如何解决这个问题呢?首先,您需要向您的团队展示什么来自 JUnit 5,什么来自 JUnit 4,以便使用 JUnit 5 而不是 JUnit 4 创建新测试。之后,无论何时,都需要遵循 Boy Scout 规则他们通过了 JUnit 4 测试,他们必须迁移到 JUnit 5。

让我们看看 JUnit 5 中发布的主要更改。一切都从名称开始,在 JUnit 5 中,您看不到名为 org.junit5 的包,而是看到 org.junit.jupiter。总而言之,你看到的所有东西都带有“Jupiter”,这意味着来自 JUnit 5。他们之所以选择这个名字,是因为 Jupiter 以“JU”开头,是距离太阳第五颗行星。

另一个变化是关于@Test,这个注释被移动到一个新的包:org.junit.jupiter.api,现在不再使用像“expected”或“timeout”这样的属性,而是使用扩展。例如,对于超时,现在您有一个注释: @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)。另一个变化是测试方法和类都不需要公开。

@Before现在,您必须使用and ,而不是@After在测试配置中使用@BeforeEachand @AfterEach,并且您还拥有@BeforeAlland @AfterAll。 

要忽略测试,现在您必须使用@Disable而不是@Ignore. 

JUnit 5 中发布的一个好消息是注释@ParameterizedTest,它可以使用不同的参数多次运行一个测试。例如,如果您想要测试创建某个对象的方法,并且想要验证字段是否填写正确,您只需执行以下操作:

@ParameterizedTest@MethodSource("getInvalidSources")void shouldCheckInvalidFields(String name, String job, String expectedMessage) {Throwable exception = catchThrowable(() -> new Client(name, job)); assertThat(exception).isInstanceOf(IllegalArgumentException.class) .hasMessageContaining(expectedMessage);}static Stream<Arguments> getInvalidSources() {return Stream.of(Arguments.arguments("Jean Donato", "", "Job is empty"), Arguments.arguments("", "Dev", "Name is empty"));}

JUnit、4、5、木星、复古由讯客互联编程问题栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“JUnit、4、5、木星、复古