Доступ к 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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