【问题标题】:JUnit method level Category does not work with PowerMockRunnerJUnit 方法级别 Category 不适用于 PowerMockRunner
【发布时间】:2014-08-26 07:47:49
【问题描述】:

给定这个测试类

    @PowerMockIgnore("UnitTest")
    @Category(UnitTest.class)
    @RunWith(PowerMockRunner.class)
    public class SomeClass {

       @Test
       @Category(SlowTest.class)
       public void SlowMethod(){...}
    }

还有一个测试套件

   @RunWith(Categories.class)
   @SuiteClasses({AllUnitTestSuite.class})
   @ExcludeCategory(SlowTest.class)
   public class FastUnitTestSuite {

   }

当我运行 FastUnitTestSuite 时,它​​也会运行 SlowMethod,尽管它属于 SlowTest 类别。 我可以使用 PowerMockIgnore 和多个类别排除慢速测试类。使用 PowerMockRunner 时如何排除慢速测试方法?

【问题讨论】:

    标签: junit powermock


    【解决方案1】:

    谢谢你!这是我所做的更改:

    @PowerMockIgnore({ "org.mockito.*" })
    @Category(UnitTest.class)
    
    public class SomeClass {
    
       @Rule
       public PowerMockRule rule = new PowerMockRule(); //it has to be public
    
       @Test
       @Category(SlowTest.class)
       public void SlowMethod(){...}
    }
    

    我还必须将这些库添加到我的类路径中:powermock-module-junit4-rule、powermock-classloading-base、powermock-classloading-xstream、xpp3_min

    【讨论】:

      【解决方案2】:

      由于类别中的以下行导致此问题。方法hasCorrectCategoryAnnotation下的CategoryFilter文件

      if (fIncluded == null || fIncluded.isAssignableFrom(each))
      
      • 即使类类型相同或处于继承状态,这也会失败,因为 fIncluded 由 Categories 类加载器加载,each 由 PowerMockRunner 类加载器加载。

      可能我们需要修复这个逻辑

      【讨论】:

        【解决方案3】:

        当您想将PowerMock 与不同的测试运行器一起使用时,您应该使用powermock junit rule: PowerMockRule

        您可以在this answer 中看到带有SpringJUnit4ClassRunner 的示例。

        【讨论】:

          猜你喜欢
          • 2016-12-10
          • 2014-11-29
          • 2018-09-06
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 2019-08-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多