java - 如何使用 Junit5 为每个测试使用单独的类加载器
问题描述
我一直在尝试设置一个 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 那里得到一个例外,说该类的类型不正确。
有人知道吗?
解决方案
JUnit Jupiter还不支持这一点。这是相关问题:https ://github.com/junit-team/junit5/issues/201
推荐阅读
- mysql - WordPress - 启用自定义数据库搜索
- windows - WinRM 无法处理请求 - 由策略服务器控制
- laravel - 从具有视频原因的 Livewire 组件内的 js 发出事件“无法在 'Node' 错误上执行 'replaceChild'
- android - 如何确定 NMEA/GPS 数据来自外部 GPS 设备 (Android)?
- c++ - C++20 概念需要运算符重载与用户定义的模板运算符重载函数相结合
- javascript - 如何禁用 Rollup.js 包的自动代码拆分?
- javascript - 如何使用字符串在 Javascript(使用打字稿)中选择枚举值?
- mysql - 如何在spring boot中设置mysql系统变量?
- python - 使用 fastapi 更新数据库中的对象
- heroku - next.config.js 中的 process.env