我们正在尝试使用 Powermock,对于初学者来说,我们觉得它是一个非常好的用于静态方法测试的单元测试工具。
我们无法弄清楚如何在接口或注释类型中使用 Powermock 注释。
当我们在抽象类中使用它们并使我们的测试类扩展时,它可以工作
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public abstract class BaseTestClass {
}
但是,如下在接口中定义它们并使测试类实现该接口不起作用:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public interface ITestClass {
}
如下实现自定义注释并使用该注释注释测试类也无济于事:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Dummy.class })
@PowerMockIgnore({ "javax.management.*", "com.mycompany.excludepackage.*" })
public @interface TestClassAnnotation {
}
对于这两种情况,我们都有 ClassNotPreparedException
[Ljava.lang.Object;@43bc63a3
The class xxx not prepared for test.
at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:29)
at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:37)
at org.powermock.api.mockito.internal.mockcreation.AbstractMockCreator.validateType(AbstractMockCreator.java:10)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:49)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:40)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:62)
那么除了扩展类之外,我们还有什么方法可以利用注解呢?扩展一个类对我们来说太严格了,因为我们需要忽略同一个测试类的不同包。
我们正在寻找一种通过组合而不是继承来实现这一目标的方法。
通过组合应用多个注释的任何其他建议也将有所帮助
提前致谢