为啥 JUnit 5 默认访问修饰符更改为 package-private

Posted

技术标签:

【中文标题】为啥 JUnit 5 默认访问修饰符更改为 package-private【英文标题】:Why JUnit 5 default access modifier changed to package-private为什么 JUnit 5 默认访问修饰符更改为 package-private 【发布时间】:2019-08-08 12:02:28 【问题描述】:

为什么 JUnit 5 package-private 中的默认访问修饰符是?

JUnit 4 中的测试必须是公开的。

将其更改为包私有有什么好处?

【问题讨论】:

...你认为在 JUnit5 中声明为 public 的测试不再起作用? 好处是不用到处加public @Stultuske 哈哈,不,我没有写过这样的东西...... 【参考方案1】:

为什么 JUnit 5 package-private 中的默认访问修饰符是?

这不是“默认”。从技术上讲,没有默认值。相反,在 JUnit Jupiter 中,您可以选择:publicprotected 或 package-private。

将其更改为包私有有什么好处?

好处是您不再有public 类型。如果您的 IDE 自动为您生成public 的测试方法和测试类,请随时留下public

但是...如果您自己输入方法,那么请不要使用public,除非您正在设计测试类以从其他包中继承,在这种情况下,您希望自己的 可覆盖测试方法publicprotected。当然,接口default 方法必须是public

长话短说:我们(JUnit 5 团队)信奉“少即是多”的原则,这意味着您为实现目标而输入的内容越少越好!

【讨论】:

【参考方案2】:

这是 JUnit 5 feature,它为测试类和方法提供了更好的封装

将 Jupiter 测试包设为私有 #679

测试类大多位于被测类的same package:

更好的方法是将测试放在一个单独的并行目录结构中,并与包对齐。

main/                          test/
   com/                           com/
      xyz/                           xyz/
         ? SomeClass.java              ? SomeClassTests.java

这种方法允许测试代码访问被测类的所有公共和封装可见成员。

【讨论】:

我不确定这是否回答了我的问题...我知道这是一个功能,您编写的所有内容都是所有测试框架的通用方法。测试包私有而不是公开有什么好处? @wojtek1902 它为测试类和方法提供了更好的封装 我需要在测试中封装什么?? @wojtek1902 测试仍然是 java 代码(虽然没有在生产中执行) 老实说,这并不能说服我...我看不出测试中的封装有什么好处...

以上是关于为啥 JUnit 5 默认访问修饰符更改为 package-private的主要内容,如果未能解决你的问题,请参考以下文章

更改 Scala 默认类访问修饰符

在运行时更改访问修饰符

更改Java中重写方法的访问修饰符?

COM Interop的重命名/前缀类

为啥 Swift 的访问修饰符默认不是私有的?

易失性与互锁性与锁定性