给定这个测试类
@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
的例子。