我一直在尝试设置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那里得到一个异常(exception),说该类的类型不正确。
有人知道吗?
最佳答案
JUnit Jupiter尚未不支持。这是相关的问题:https://github.com/junit-team/junit5/issues/201