2016-09-14 102 views
0

在向类中写入junit的过程中,我得到了一些要求,例如使用JUnitRunner执行测试,然后使用PowermockRunner执行测试,所以基于此我要决定是否跳过测试或继续。请你能让我知道有没有办法来检查这个?如何检查Junit是否正在运行JunitRunner或PowermockRunner

在此先感谢。

+2

不要。只是。别。在如此多的层面上这是错误的。写两个测试,每个测试都有自己的跑步者并且完成它。如果您需要,请将代码放入共享的抽象基础测试类中。 –

回答

1

有几个选项,但没有一个是漂亮的。

最好的办法是,如果这些跑步者中的任何一个都支持你可以查询的系统属性,但是我怀疑这一点。

如果失败,您可以执行类查找或检查堆栈。

  1. 类查找

    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

    相关问题