加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:43:55 所属栏目:Java 来源:网络整理
导读:我如何让JUnit为其执行的每个测试类使用一个单独的ClassLoader? 我正在为一个设置很多静态变量的库写一个JUnit TestRunner.我基本上想要在每个测试类之间重置所有这些,而不需要知道它们是什么.我不想与框架的亲密知识相结合,因为只要库内部更改,我的TestRun
我如何让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>作为查找地图中的关键.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读