gpt4 book ai didi

java - 使用单独的类加载器运行每个 JUnit 测试(不,真的)

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:16 26 4
gpt4 key购买 nike

我如何让 JUnit 为其执行的每个测试类使用单独的 ClassLoader

我正在为设置大量静态变量的库编写 JUnit TestRunner。我基本上想在每个测试类之间重置所有这些,而不需要知道它们是什么。我不想与框架的深入知识相结合,因为每当库内部发生变化时,我的 TestRunner 就会崩溃。

在我继续之前,我想绝对清楚地表明我真的想要这样做。

  • 我无法控制图书馆。
  • 我没有不使用静态变量的选择。
  • 我不想使用反射或 Powermock,因为我不想知道库中发生了什么。
  • 我不想使用 Maven 配置来 fork 测试过程,因为这样测试实用程序就会绑定(bind)到构建工具。

我在 StackOverflow 上找到的所有其他答案都只是说“不要那样做”,这没有帮助。第一个回答“静态变量很蠢”的人会赢得一个 donut 。

最佳答案

最后我写了自己的,大致基于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 中加载,因为它引用的所有类都将使用相同的加载器。隔离是包容性的(而不是排他性的),因为您需要 JUnit @Test由父级加载的注释 ClassLoader ,否则 JUnit 找不到任何可测试的方法,因为它使用 Class<Test>作为查找映射中的键。

关于java - 使用单独的类加载器运行每个 JUnit 测试(不,真的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28571354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com