如何使用 Junit5 为每个测试使用单独的类加载器

Arn*_*lle 5 java junit5

我一直在尝试设置一个 Junit 5 扩展来强制每个测试获得一个单独的类加载器。我可以在 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我从 Junit 那里得到一个例外,说这个类的类型不正确。

有人有什么想法吗?

Sor*_*ras 3

JUnit Jupiter 还不支持这一点。这是相关问题:https://github.com/junit-team/junit5/issues/201