Как создать отдельный загрузчик классов для каждого теста с использованием Junit5 - PullRequest
4 голосов
/ 08 ноября 2019

Я пытался настроить расширение Junit 5, чтобы каждый тест получал отдельный ClassLoader. Я могу сделать это довольно легко в Junit4, создав свой собственный BlockJUnit4ClassRunner. Но я не могу заставить его работать сейчас.

Цель состоит в том, чтобы иметь возможность тестировать такие вещи, как статические блоки или запомненные поля в разных состояниях.

Я пытался использовать TestInstanceFactoryпока безуспешно с чем-то подобным:

public class SeparateClassLoaderExtension implements TestInstanceFactory {

    @SneakyThrows
    @Override
    public Object createTestInstance(TestInstanceFactoryContext factoryContext, ExtensionContext extensionContext) throws TestInstantiationException {
        ClassLoader testClassLoader = new TestClassLoader();
        final Class<?> testClass = Class.forName(factoryContext.getTestClass().getName(), true, testClassLoader);

        Constructor<?> defaultConstructor = testClass.getDeclaredConstructor();
        defaultConstructor.setAccessible(true);
        return defaultConstructor.newInstance();
    }
}

Я получаю исключение от Junit, говорящее о том, что класс неправильного типа.

Кто-то, какая идея?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

JUnit Jupiter не пока поддерживает это. Вот связанная проблема: https://github.com/junit-team/junit5/issues/201

0 голосов
/ 08 ноября 2019

Они сделали что-то совершенно запутанное, так как Spring там .

Похоже, что это более или менее работает, но не работает с другими параметрами расширения расширения, и я не пошел дальше.

...