私はさまざまなモッキング ライブラリの内外を学習しようとしていますが、PowerMock (具体的には EasyMock 拡張機能) は次のリストにあります。コンストラクターをモックしようとしていますが、提供されている例を複製しようとすると、同じ応答がありません。私が知る限り、コンストラクターをモックすることはなく、通常のように処理されます。
これはテストクラスです:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Writer.class})
public class FaultInjectionSituationTest {
@Test
public void testActionFail() throws Exception {
FaultInjectionSituation fis = new FaultInjectionSituation();
PowerMock.expectNew(Writer.class, "test")
.andThrow(new IOException("thrown from mock"));
PowerMock.replay(Writer.class);
System.out.println(fis.action());
PowerMock.verify(Writer.class);
}
}
「テスト」を EasyMock.isA(String.class) に置き換えてみましたが、同じ結果が得られました。
これは FaultInjectionSituation です。
public class FaultInjectionSituation {
public String action(){
Writer w;
try {
w = new Writer("test");
} catch (IOException e) {
System.out.println("thrown: " + e.getMessage());
return e.getLocalizedMessage();
}
return "returned without throw";
}
}
「ライター」は、クラスのシェルにすぎません。
public class Writer {
public Writer(String s) throws IOException {
}
public Writer() throws IOException{
}
}
テストが実行されると、例外がスローされなかったことを示す「returned without throw」が出力されます。