java – 使用独立的ClassLoader运行每个JUnit测试(不,真的)

前端之家收集整理的这篇文章主要介绍了java – 使用独立的ClassLoader运行每个JUnit测试(不,真的)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何让JUnit为其执行的每个测试类使用一个单独的ClassLoader?

我正在为一个设置很多静态变量的库写一个JUnit TestRunner.我基本上想要在每个测试类之间重置所有这些,而不需要知道它们是什么.我不想与框架的亲密知识相结合,因为只要库内部更改,我的TestRunner就会中断.

在我走之前,我想明确地说,我真的很想这样做.

>我没有图书馆的控制权.
>我没有选择不使用静态变量.
>我不想使用反思或Powermock,因为我不想知道图书馆里发生了什么.
>我不想使用Maven配置来分支测试过程,因为测试实用程序与制作工具绑定在一起.

我可以在StackOverflow上找到的其他答案只是说“不要这样做”,这是没有帮助的.第一个用“静态变量是哑”回答的人赢了一个甜甜圈.

解决方法

最后我写了自己,松散地基于 another Stack Overflow answer(这对我来说没有用).

现在在GitHub和Maven Central.
https://github.com/BinaryTweed/quarantining-test-runner

<dependency>
    <groupId>com.binarytweed</groupId>
    <artifactId>quarantining-test-runner</artifactId>
    <version>0.0.1</version>
</dependency>

使用它相应地注释你的测试类:

@RunWith(QuarantiningRunner.class)
@Quarantine({"com.binarytweed"})
public class MyIsolatedTest {
...

因为测试类本身需要加载到单独的ClassLoader中,因此链接的答案对我来说并不起作用,因为所引用的所有类将使用相同的加载器.隔离是包容性的(而不是排他的),因为您需要由父ClassLoader加载的JUnit @Test注释,否则JUnit无法找到任何可测试的方法,因为它使用Class&Test>作为查找地图中的关键.

原文链接:https://www.f2er.com/java/124493.html

猜你在找的Java相关文章