我有一个maven项目,应该在java-8,java-11上运行。我想增加对java-17的支持,并且我在测试方面有一些问题。
测试的简化版本如下所示:
@Test
public void testGraphics() throws Exception {
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = Mockito.spy(bi.createGraphics());
//my code for testing
graphics.getColor();
Mockito.verify(graphics, times(1)).getColor();
}我执行测试时:
mvn clean compile test这在java 8和java 11上很好。但是,在java 17中,我得到:
java.lang.IllegalAccessException: class org.mockito.internal.util.reflection.ReflectionMemberAccessor cannot access class sun.java2d.SunGraphics2D (in module java.desktop) because module java.desktop does not export sun.java2d to unnamed module @62bd2070可以通过在test命令中添加--add-opens=java.desktop/sun.java2d=ALL-UNNAMED来解决这个问题:
mvn clean compile test -DargLine=--add-opens=java.desktop/sun.java2d=ALL-UNNAMED但是,该命令不能在java 8上工作,因为它不识别--add-opens选项:
Unrecognized option: --add-opens=java.desktop/sun.java2d=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.我的持续集成是在不同环境(不同的java版本、不同的数据库等)中运行相同测试的矩阵,我希望避免根据环境的不同而有不同的maven选项。
是否有另一种不需要在不同java版本中更改maven参数的方法来运行此测试?我不能使用Mockito.mock,因为我的代码与图形对象交互,并取决于结果(而且有许多调用,因此暂时无法对每个调用进行模拟)。以下是我考虑过但却找不到办法去做的选择:
sun.java2d.SunGraphics2D
)。
为了记录在案,我使用的是junit 4.12和mockito 4.6.1
发布于 2022-06-09 12:57:15
其中一种方法是提供一个让java忽略未被识别的选项的选项。可以使用以下命令完成此操作:
mvn clean compile test -DargLine="--add-opens=java.desktop/sun.java2d=ALL-UNNAMED -XX:+IgnoreUnrecognizedVMOptions"https://stackoverflow.com/questions/72560187
复制相似问题