当前位置: 首页 > 知识库问答 >
问题:

JUINT测试给出错误java。朗,反思一下。InAccessibleObject异常:无法使受保护的java无效。朗,反对。定稿

陈俊誉
2023-03-14

在运行测试时,我得到了错误,我无法理解为什么我会得到这个错误,这段代码在java 8中使用fine,而在java 17中运行它时,它给出了错误。谷歌搜索了这个错误,但没有发现任何有用的东西。请帮我理解这个错误。提前感谢:)

@RunWith(PowerMockRunner.class)
@PrepareForTest({PopulatedAuthorizedUser.class})
@SpringBootTest(classes = MockServletContext.class)
@PowerMockIgnore({"javax.management.*", "javax.net.ssl.*", 
"jdk.internal.reflect.*"})
public class ProjectUserControllerTest {

private ProjectUserController controller;

private UUID projectId = UUID.randomUUID();
private UUID groupId = UUID.randomUUID();
private String email = "project.user@email.com";

@Mock
private ProjectUserService projectUserService;

private ObjectMapper objectMapper = new ObjectMapper();

@Mock
protected AuthorizedUser au;

@Before
public void setUp() throws Exception {
    controller = new ProjectUserController();
    FieldUtils.writeField(controller, "projectUserService", projectUserService, true);
    FieldUtils.writeField(controller, "objectMapper", objectMapper, true);
    PowerMockito.mockStatic(PopulatedAuthorizedUser.class);
    Mockito.when(PopulatedAuthorizedUser.get()).thenReturn(mockAuthorizedUser());
}

@Test
public void testGetProjectUsers() {
    Mockito.doReturn(Arrays.asList(mockProjectUser())).when(projectUserService)
            .findProjectUsersByProjectId(projectId);
    Mockito.doNothing().when(projectUserService).enrichUserDetails(any(ProjectUserDto.class));
    ResponseEntity<List<ProjectUserDto>> response=controller.getProjectUsers(projectId);
    assertNotNull(response);
    ProjectUserDto projectUserDto = response.getBody().get(0);
    assertEquals(groupId, projectUserDto.getGroupId());
    assertEquals(email, projectUserDto.getUsername());
    assertTrue(projectUserDto.getEmailNotification());
    assertEquals(ProjectUserRole.OWNER.toString(), projectUserDto.getRole());
   }

 }

例外情况:

 java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.lang.Object.finalize() throws java.lang.Throwable accessible: module java.base does not "opens java.lang" to unnamed module @5ba23b66

at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at org.powermock.reflect.internal.WhiteboxImpl.doGetAllMethods(WhiteboxImpl.java:1492)
at org.powermock.reflect.internal.WhiteboxImpl.getAllMethods(WhiteboxImpl.java:1467)
at org.powermock.reflect.internal.WhiteboxImpl.findMethodOrThrowException(WhiteboxImpl.java:847)
at org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:807)
at org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:790)
at org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)
at org.powermock.modules.junit4.common.internal.impl.PowerMockJUnit4RunListener.testFinished(PowerMockJUnit4RunListener.java:55)
at org.junit.runner.notification.SynchronizedRunListener.testFinished(SynchronizedRunListener.java:87)
at org.junit.runner.notification.RunNotifier$9.notifyListener(RunNotifier.java:225)
at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:72)
at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:222)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.testAborted(PowerMockJUnit44RunnerDelegateImpl.java:229)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:206)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:160)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:134)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:136)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:121)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:57)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)

共有2个答案

颜啸
2023-03-14

按如下方式启动JVM:

# --add-opens has the following syntax: {A}/{package}={B}
java --add-opens java.base/java.lang=ALL-UNNAMED

如何解决在Java9上无法使{成员}可访问:模块{A}不打开{包}到{B})?

长孙文栋
2023-03-14

在Java9和更高版本中,模块系统可能会导致这些错误。我对JUnit 5本身也有同样的问题,因为我从测试类和方法中省略了public

以下是我的POM中解决这个问题的方法:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <!-- Allow JUnit to access the test classes -->
    <argLine>--add-opens <my-module>/<my-package>=ALL-UNNAMED</argLine>
  </configuration>
</plugin>

在您的情况下,您可能需要使用java.base/java.lang=ALL_UNNAMED

 类似资料:
  • 我很难在fxml/java代码中找到要修复的内容,这就是全部错误: java.lang.reflect.InvocationTargetExctive atsun.reflect.NativemetodAccessorImpl.invoke0(本机方法)atsun.reflect.NativemetodAccessorImpl.invoke(NativemetodAccessorImpl.java

  • 一面: 先是自我介绍,然后 java基础,java集合arraylist和LinkedList区别,并发,mysql索引,redis的缓存穿透和击穿的区别,springboot的优势。然后就是反问。需要等待三四天通知。 二面: 就是hr面,先是自我介绍,是否了解公司,然后问简历上的两个项目,项目设计的原因,平常学校参与的团队项目介绍,团队项目存在的问题如何解决的,公司可能需要经常出差是否能够接受,

  • 我正试图开发一个具有教学目的的基本应用程序,使用Struts 2 Spring 4.1 JPA/Hibernate 3.6和Netbeans 8作为IDE。我成功地创建和更新了用户,但当我尝试登录时,我得到了,特别是在本说明中: 将创建数据库,并在每个表中包含两条记录。 我将非常感谢任何关于为什么这会发生在我身上的帮助。 以下是我正在使用的库的列表: Struts2 2.3.16-asm-3.3.

  • 我正在从事JavaFX项目,我创建了两个FXML文件,我想将另一个窗格加载到主窗格,即边框窗格。我想将另一个窗格加载到边框窗格中心区域! 这是我的项目的切入点,这是一个Java文件 之后,将显示显示“我的边框”窗格的主FXML文件 我设置了一个按钮,将特定窗格显示到边框窗格中心区域。 这是我的控制器类的边界窗格包含类 这是我想显示在边界窗格中心区域的FXML文件。 但是当我点击按钮,给我一堆错误!

  • 在java8中,可以访问java类的字段。朗。反思。使用例如。 在java12(从java9开始?)这只返回一个空数组。这不会改变,即使 设置。 有什么办法可以做到这一点吗?(显然,这可能不是一个好主意,我希望在junit测试期间通过反射更改代码中的“static final”字段 )

  • 我是mUrthy,我写的是selenium脚本,当我试图执行脚本时,我遇到了错误,请查看下面的脚本和错误。任何一个都能提供更好的解决方案。我使用的是最新版本。 脚本: 包测试项目; 导入组织。openqa。硒。网络驱动程序;导入组织。openqa。硒。火狐。火狐司机; 公共类FirstTestCase{ }错误:线程"main"中的异常java.lang.错误:未解决的编译问题:重复的局部变量驱动