如何检查Junit是否正在运行JunitRunner或PowermockRunner
问题描述:
在向类中写入junit的过程中,我得到了一些要求,例如使用JUnitRunner执行测试,然后使用PowermockRunner执行测试,所以基于此我要决定是否跳过测试或继续。请你能让我知道有没有办法来检查这个?如何检查Junit是否正在运行JunitRunner或PowermockRunner
在此先感谢。
答
有几个选项,但没有一个是漂亮的。
最好的办法是,如果这些跑步者中的任何一个都支持你可以查询的系统属性,但是我怀疑这一点。
如果失败,您可以执行类查找或检查堆栈。
-
类查找
boolean isPowerMock = false; try{ Class.forName("fully.qualified.name.of.PowerMockRunner"); isPowerMock = true; }catch(ClassNotFoundException e){}
注意,这种技术可能会返回一个误报如果PowerMock是在类路径上,但不使用亚军。
-
检查堆栈
boolean isPowerMockRunner = false; for (StackTraceElement stackTraceElement : Thread.currentThread().getStackTrace()) { if(stackTraceElement.getClassName().contains("PowerMockRunner")) { isPowerMockRunner = true; break; } }
或者,爪哇8风格:
boolean isPowerMock = Arrays.stream(
Thread.currentThread()
.getStackTrace()
)
.anyMatch(
elem -> elem.getClassName()
.contains("PowerMockRunner")
);
+0
只是我想提供一些更多的细节,那是我创建了@RunWith(PowerMockRunner.class)@PrepareForTest(以静态方式模拟的类)的Junit。 – Ram
不要。只是。别。在如此多的层面上这是错误的。写两个测试,每个测试都有自己的跑步者并且完成它。如果您需要,请将代码放入共享的抽象基础测试类中。 –