junit5 如何在没有 public 修饰符的情况下访问/运行测试方法?

问题描述 投票:0回答:1

为什么 JUnit 5 默认访问修饰符更改为 package-private 中,Sam Brannenanswer 提到遵循“少即是多”的原则,不再需要定义公共方法,这解释了原因这一变化的背后(我认为这很棒!)。

但是,我还是不太明白这在技术上是如何实现的。

为什么Junit测试用例(方法)应该公开?(这是关于

Junit4
),接受的答案指出:

如果这些方法不是

public
,调用它们可能会失败(因为 SecurityManager 会否决这一点)。

当通过反射访问包私有/受保护的方法时,如何以及为什么这不再是

Junit5
中的问题?

java junit4 junit5
1个回答
0
投票

JUnit 5 更广泛地使用反射。它具有更强大的功能来查找类和方法,以及注入不可见(私有、包私有等)成员的值。我看到他们的一些代码使用

setAccessible(true)
来使非公共字段和方法可访问。

但是,这对于 Java 9 中添加的模块系统来说效果不佳。您可以使用

--add-opens
JVM 标志来解决这个问题。有关更多信息,请参阅 https://stackoverflow.com/a/71296829/1180351

© www.soinside.com 2019 - 2024. All rights reserved.