为什么 assertEquals 中的可选断言消息移到了 Junit 5 中的最后一个位置?
Why was the optional assertion message in assertEquals move to the last position in Junit 5?
在 JUnit 4 中,可选断言消息是 assertEquals 方法中的第一个参数。在 JUnit 5 中,它是最后一个。
移到最后位置有什么技术原因吗?如果是,是哪个?
这需要询问作者本人,但这是其他图书馆的常见模式。
例如 Guava Preconditions#checkNotNull
,甚至 Objects#requireNoNull
中的 JDK 本身。该可选参数是 "last one" IMO 有点有意义(但这当然是基于意见)。
我将尝试阐明我们 3 年前在设计 JUnit 5 API(现在体现在 Jupiter 测试引擎中)时的思维过程。当时在场的其他人(Marc Philipp、Sam Brannen、Matthias Merdes 和 Stefan Bechtold)可能会插话并纠正我的记忆...
我们有一些基本限制:
从编译器的角度来看,JUnit 5 API 应该与旧版本完全分开,以便来自不同版本的测试可以并排进行
尽管如此,API 应该感觉 熟悉,以便于迁移
API 应该结合 Java API 设计的最新技术和良好实践
决定 org.junit.jupiter.api.Assertions
中所有断言方法的可选消息参数将始终是最后一个是第 2 点和第 3 点之间的权衡。这更有意义,因为我们允许 Supplier<String> messageSupplier
个参数.在断言语句的第一个位置使用 lambda 表达式看起来很奇怪而且会分散注意力 - 所以我们认为。
事后看来,我可能会主张对断言 API 进行更彻底的改变,以便放弃在这个问题中触及的那种混淆。考虑到 JUnit Jupiter 新手导入旧 org.junit.Test
注释的频率以及想知道为什么系统表现异常,我什至会推动不使用 @Test
作为测试方法的主要标记。
在 JUnit 4 中,可选断言消息是 assertEquals 方法中的第一个参数。在 JUnit 5 中,它是最后一个。
移到最后位置有什么技术原因吗?如果是,是哪个?
这需要询问作者本人,但这是其他图书馆的常见模式。
例如Guava Preconditions#checkNotNull
,甚至 Objects#requireNoNull
中的 JDK 本身。该可选参数是 "last one" IMO 有点有意义(但这当然是基于意见)。
我将尝试阐明我们 3 年前在设计 JUnit 5 API(现在体现在 Jupiter 测试引擎中)时的思维过程。当时在场的其他人(Marc Philipp、Sam Brannen、Matthias Merdes 和 Stefan Bechtold)可能会插话并纠正我的记忆...
我们有一些基本限制:
从编译器的角度来看,JUnit 5 API 应该与旧版本完全分开,以便来自不同版本的测试可以并排进行
尽管如此,API 应该感觉 熟悉,以便于迁移
API 应该结合 Java API 设计的最新技术和良好实践
决定 org.junit.jupiter.api.Assertions
中所有断言方法的可选消息参数将始终是最后一个是第 2 点和第 3 点之间的权衡。这更有意义,因为我们允许 Supplier<String> messageSupplier
个参数.在断言语句的第一个位置使用 lambda 表达式看起来很奇怪而且会分散注意力 - 所以我们认为。
事后看来,我可能会主张对断言 API 进行更彻底的改变,以便放弃在这个问题中触及的那种混淆。考虑到 JUnit Jupiter 新手导入旧 org.junit.Test
注释的频率以及想知道为什么系统表现异常,我什至会推动不使用 @Test
作为测试方法的主要标记。