在向类编写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;
    }
}



或者,Java 8样式:

boolean isPowerMock = Arrays.stream(
                                Thread.currentThread()
                                      .getStackTrace()
                             )
                            .anyMatch(
                                elem -> elem.getClassName()
                                            .contains("PowerMockRunner")
                             );

09-10 13:32