java – 使用独立的ClassLoader运行每个JUnit测试(不,真的)
我如何让JUnit为其执行的每个测试类使用一个单独的ClassLoader?
我正在为一个设置很多静态变量的库写一个JUnit TestRunner.我基本上想要在每个测试类之间重置所有这些,而不需要知道它们是什么.我不想与框架的亲密知识相结合,因为只要库内部更改,我的TestRunner就会中断. 在我走之前,我想明确地说,我真的很想这样做. >我没有图书馆的控制权. 我可以在StackOverflow上找到的其他答案只是说“不要这样做”,这是没有帮助的.第一个用“静态变量是哑”回答的人赢了一个甜甜圈. 解决方法
最后我写了自己,松散地基于
another Stack Overflow answer(这对我来说没有用).
现在在GitHub和Maven Central. <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>作为查找地图中的关键. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |