gpt4 book ai didi

java - org.powermock.reflect.internal.WhiteboxImpl 对方法 java.lang.Object.clone() 的非法反射访问

转载 作者:行者123 更新时间:2023-12-01 22:55:38 24 4
gpt4 key购买 nike

我想使用这个 JUnit 测试来测试私有(private)方法:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = ReportingProcessor.class)
public class ReportingTest {

@Autowired
ReportingProcessor reportingProcessor;

@Test
public void reportingTest() throws Exception {

ContextRefreshedEvent contextRefreshedEvent = PowerMockito.mock(ContextRefreshedEvent.class);
Whitebox.invokeMethod(reportingProcessor, "collectEnvironmentData", contextRefreshedEvent);

}
}

但是我得到警告:发生了非法反射访问操作
警告:org.powermock.reflect.internal.WhiteboxImpl 进行非法反射访问(文件:/C:/Users/Mainuser/.m2/repository/org/powermock/powermock-reflect/2.0.2/powermock-reflect-2.0.2 .jar) 到方法 java.lang.Object.clone()
警告:请考虑将此报告给 org.powermock.reflect.internal.WhiteboxImpl 的维护者
警告:使用 --illegal-access=warn 启用进一步非法反射访问操作的警告
警告:在未来的版本中将拒绝所有非法访问操作

有办法解决这个问题吗?

最佳答案

已经有一些关于它的问题:

what is an illegal reflective access

JDK9: An illegal reflective access operation has occurred. org.python.core.PySystemState

还有一些。

出于测试目的,您只需从您这边执行反射即可,无需使用依赖项。为了更好地理解,我更改了collectEnvironmentData方法的返回类型:

 @EventListener
private String collectEnvironmentData(ContextRefreshedEvent event) {
return "Test";
}

您可以通过以下方式访问它来实现假装结果:

    @Test
public void reportingTest() throws Exception {

ContextRefreshedEvent contextRefreshedEvent = PowerMockito.mock(ContextRefreshedEvent.class);

Method privateMethod = ReportingProcessor.class.
getDeclaredMethod("collectEnvironmentData", ContextRefreshedEvent.class);

privateMethod.setAccessible(true);

String returnValue = (String)
privateMethod.invoke(reportingProcessor, contextRefreshedEvent);
Assert.assertEquals("Test", returnValue);
}

使用 JDK13,我的控制台上没有警告。

关于java - org.powermock.reflect.internal.WhiteboxImpl 对方法 java.lang.Object.clone() 的非法反射访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com