在为什么 JUnit 5 默认访问修饰符更改为 package-private 中,Sam Brannen 的 answer 提到遵循“少即是多”的原则,不再需要定义公共方法,这解释了原因这一变化的背后(我认为这很棒!)。
但是,我还是不太明白这在技术上是如何实现的。
在为什么Junit测试用例(方法)应该公开?(这是关于
Junit4
),接受的答案指出:
如果这些方法不是
,调用它们可能会失败(因为 SecurityManager 会否决这一点)。public
当通过反射访问包私有/受保护的方法时,如何以及为什么这不再是
Junit5
中的问题?
JUnit 5 更广泛地使用反射。它具有更强大的功能来查找类和方法,以及注入不可见(私有、包私有等)成员的值。我看到他们的一些代码使用
setAccessible(true)
来使非公共字段和方法可访问。
但是,这对于 Java 9 中添加的模块系统来说效果不佳。您可以使用
--add-opens
JVM 标志来解决这个问题。有关更多信息,请参阅 https://stackoverflow.com/a/71296829/1180351