JUnit方法级别的Category不能与PowerMockRunner一起工作



给定这个测试类

    @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时如何排除缓慢的测试方法?

谢谢!以下是我修改的内容:

@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

这个问题是由于类别下一行造成的。方法hasCorrectCategoryAnnotation下的CategoryFilter文件

if (fIncluded == null || fIncluded.isAssignableFrom(each))
  • 这将失败,即使类类型相同或继承,因为fIncluded是由Categories类加载器加载的,each是由PowerMockRunner类加载器加载的。

也许我们需要修复这个逻辑

当您想在不同的测试运行器上使用PowerMock时,您应该使用powermock junit规则:PowerMockRule

你可以在这个答案中看到一个带有SpringJUnit4ClassRunner的例子。

相关内容

  • 没有找到相关文章

最新更新