私は、ある例外をスローする抽象クラスBの静的メソッドを呼び出すクラスAを持っています。私はこの例外をテストしたかったのです。私は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");
}
}
が、私はここにこれらの例外をテストしたいとすると、このテストケースを実行している間、私は例外のよう
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)
任意の提案を取得し、私のテストクラス
@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();
}
}
}
ですなぜ私はこれを取得していますか?
念のために:私は、あなたがデザインのテストを可能にするために** **時間を費やしていることを理解してほしい...それは単にテストするのは難しいように書かれていますか?もしあなたがそうする可能性があるなら、むしろその時間を費やして難しいテストを簡単なテストデザインに変えることができます。静的な呼び出しをモックする必要性を取り除き、PowerMock(ito)をスローします。あなたの人生はずっと簡単になります。 – GhostCat