为啥 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 中,您可以选择:public
、protected
或 package-private。
将其更改为包私有有什么好处?
好处是您不再有public
类型。如果您的 IDE 自动为您生成public
的测试方法和测试类,请随时留下public
。
但是...如果您自己输入方法,那么请不要使用public
,除非您正在设计测试类以从其他包中继承,在这种情况下,您希望自己的 可覆盖测试方法public
或protected
。当然,接口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的主要内容,如果未能解决你的问题,请参考以下文章