1

我们正在尝试使用 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)

那么除了扩展类之外,我们还有什么方法可以利用注解呢?扩展一个类对我们来说太严格了,因为我们需要忽略同一个测试类的不同包。

我们正在寻找一种通过组合而不是继承来实现这一目标的方法。

通过组合应用多个注释的任何其他建议也将有所帮助

提前致谢

4

0 回答 0