2012-09-10 4 views
10

さまざまな模擬ライブラリの内容を学習しようとしていて、PowerMock(特にEasyMock拡張)がリストにあります。私はコンストラクタを模擬しようとしていますが、それらを複製しようとすると、提供された例は同じ応答を持っていません。私が知る限り、それはコンストラクタを模倣することはなく、まるでそれが正常であるかのように進歩します。PowerMockのexpectNew()はコンストラクタを期待どおりに模倣していません

これはテストクラスである:

@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); 
    } 

} 

IはEasyMock.isA(String.class)と "テスト" を交換しようとしたが、それは、同じ結果が得られました。それは投げずに返された」プリントアウトし、

public class Writer { 
    public Writer(String s) throws IOException { 
    } 

    public Writer() throws IOException{ 
    } 
} 

テストが実行されます。

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"; 
    } 
} 

「ライター」は、クラスのシェル以外の何ものでもありません:

この

はFaultInjectionSituationです例外がスローされなかったことを示します。

答えて

21

を。コードを次のように更新してみてください:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Writer.class, FaultInjectionSituation.class}) 
public class FaultInjectionSituationTest { 
// as before 
} 
+1

ありがとう、コンストラクタを呼び出したオブジェクトも同様にインクルードする必要があることはわかりませんでした。 – AdamSpurgin

+0

私は同じ問題に遭遇しました...正確に私が逃していたもの: –

+0

ありがとう、私はこの答えを見つけるまで、長い間苦労しました。 – OQJF

1

あなたは最初のモックオブジェクトを作成する必要があります:あなたはPowerMockは嘲笑コンストラクタ呼び出しを期待する知っているので、同様のコンストラクタを呼び出しているクラスを準備する必要があります

Writer mockWriter = PowerMock.createMock(Writer.class) 
PowerMock.expectNew(Writer.class, "test").andReturn(mockWriter) 
+0

モックオブジェクトを作成しようとしていません。コンストラクタをインターセプトしてその代わりに例外をスローしようとしています。 [このページ](http://code.google.com/p/powermock/wiki/MockConstructor)の「より多くの機能」セクションが私が目指しているものです。 – AdamSpurgin

+1

申し訳ありませんが、私はあなたが何をしようとしているのを見ています。 JUnit 4であなたのコードを試してみました。そして、 "模擬から捨てました"(あなたが期待しているもの)を印刷します。万が一TestNGを使用していますか?私はTestNGに慣れていませんが、TestNGを使用して実行したときに「スローなしで返されました」 –

+0

私はJunit4を使用しています。私はそれが動作しない原因となるものは考えられません。 – AdamSpurgin

関連する問題