Доступ к jdk.unsupported из JUnit не требует наличия модуляJAVA

Программисты JAVA общаются здесь
Anonymous
Доступ к jdk.unsupported из JUnit не требует наличия модуля

Сообщение Anonymous »

Я пытаюсь выяснить, почему поведение JUnit отличается от поведения «обычной» Java-программы по отношению к модулю jdk.unsupported. И да, я знаю, что мне не следует этим пользоваться. Я просто пытаюсь (и безуспешно) понять, как все работает.
У меня есть эта программа:

Код: Выделить всё

public class UnsafeAttempt {
public static void main(String[] args) {
try {
Class.forName("sun.reflect.ReflectionFactory");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
При запуске по пути к модулю выдается исключение java.lang.ClassNotFoundException, чего я и ожидал. Когда я добавляю require jdk.unsupported; в модуль-info.java, он работает без проблем, чего я тоже ожидаю.
Но если я его вставлю модульный тест:

Код: Выделить всё

import org.junit.jupiter.api.Test;

public class UnsafeTest {
@Test
public void sunreflect() throws Exception {
Class.forName("sun.reflect.ReflectionFactory");
}
}
С помощью этого файла mod-info.java в src/test/java:

Код: Выделить всё

open module my.module {
exports my.module;

requires org.junit.jupiter.api;
}
Это работает без добавления, требующего jdk.unsupported;, и я не понимаю, почему.
Я вижу такое поведение как в IntelliJ, так и в Maven. Я никак не настроил плагин Maven Surefire.
Что делает JUnit или Surerefure (или что-то еще), чтобы это работало?

Подробнее здесь: https://stackoverflow.com/questions/790 ... le-require

Вернуться в «JAVA»