【发布时间】:2017-05-15 06:56:27
【问题描述】:
我有一个类 A 调用抽象类 B 的静态方法,该方法抛出一些异常。我想测试这个异常。我正在使用 junit 4.1、mockito 1.9.5 和 powermock 1.6.6。课程是:
abstract class B {
public static void meth(String str) throws SomeException1, SomeException2,SomeException3 {
//some code
}
}
class A{
public void method() throws SomeException1, SomeException2,SomeException3 {
B.meth1("abc");
}
}
我想测试这些异常,这是我的测试类
@RunWith(MockitoJUnitRunner.class)
@PrepareForTest(B.class)
class Test throws Throwable {
public void testException(){
PowerMockito.mockStatic(B.class); //Line 6
when(B.meth(Mockito.any(String.class))).thenThrow(new SomeException1(), new SomeException2(), new SomeException3() );
A obj=new A();
obj.method();
}
}
}
在执行这个测试用例时我得到一个异常
org.powermock.api.mockito.ClassNotPreparedException:
The class B not prepared for test.
To prepare this class, add class to the '@PrepareForTest' annotation.
In case if you don't use this annotation, add the annotation on class or method level.
at org.powermock.api.mockito.expectation.reporter.MockitoPowerMockReporter.classNotPrepared(MockitoPowerMockReporter.java:32)
at org.powermock.api.mockito.internal.mockcreation.MockTypeValidatorFactory$DefaultMockTypeValidator.validate(MockTypeValidatorFactory.java:38)
at org.powermock.api.mockito.internal.mockcreation.AbstractMockCreator.validateType(AbstractMockCreator.java:10)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:56)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:46)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:71)
at Test.testException(Test.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
关于我为什么会得到这个的任何建议?
【问题讨论】:
-
仅作记录:我希望您了解您花费 小时 来测试设计......只是为了难以测试而编写?如果您有可能这样做:宁愿花时间将难以测试的设计转变为易于测试的设计。并摆脱了模拟静态调用的需要,并抛弃了 PowerMock(ito)。会让你的整个生活变得更简单。
标签: java junit mockito powermock