我有一个项目,在该项目中我使用对类的反射式访问(例如,通过Spring,还有其他人)。而且一切正常。现在我尝试添加module-info.java
,突然我的测试无法使用反射找到我的生产代码在带有OpenJDK 11.0.2的IntelliJ IDEA Ultimate 2019.3中。我已将我的模块声明为“开放模块”。
module-info.java
时效果很好为了进行复制,我按照以下步骤设置了一个新项目,但仍然无法正常工作:
一个基本上有两个文件的简单项目:
MainTest.java
包含以下两个均通过的简单测试:
package com.stackoverflow.test;
imports...
public class MainTest {
@Test
public void testingAccess() {
var actual = new Main();
assertNotNull(actual);
}
@Test
public void testingReflections() {
Set<String> allClasses = new Reflections("com.stackoverflow.test", new SubTypesScanner(false)).getAllTypes();
for (String oneClass : allClasses) {
System.out.println(oneClass);
}
assertEquals(2, allClasses.size());
}
}
[当我现在添加具有以下内容的src/module-info.java
时,第二个测试testingReflections()
在IntelliJ IDEA中失败,因为它仅找到“ MainTest”。
open module com.stackoverflow.test {
exports com.stackoverflow.test;
}
如何在测试中启用对IDEA中生产代码的反射访问?
您的案例似乎与2019.3(https://youtrack.jetbrains.com/issue/IDEA-171419)中的模块化系统修复有关,它允许运行模块感知的测试。请考虑以下不同的解决方法:
也请考虑以下问题:https://youtrack.jetbrains.com/issue/IDEA-222831(支持module-info.test配置文件)。
这是关于类似问题的讨论:https://youtrack.jetbrains.com/issue/IDEA-228999