2016-11-08 15 views
-1

これは私の最初の試みであるEasyMockです。だから、私はvoid方法を模擬しようとしてきた:ボイド法を模擬して

protected void onStop() { 
    logger.info("Stopping ReporterService."); 

    if (reporter != null) { 
     reporter.stop(); 
     reporter = null; 
    } 
} 

私はオンラインいくつかのチュートリアルを踏襲し、私はこれを書いた:

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class); 

reporterService1.onStop(); 
EasyMock.expectLastCall().once(); 
replay(reporterService1); 

//EasyMock.replay(reporterService1); 
assertNull(Whitebox.getInternalState(reporterService1, "reporter")); 
EasyMock.verify(reporterService1); 

しかし、私はこれだ:

java.lang.AssertionError:
Expectation failure on verify:
ReporterService.onStop(): expected: 1, actual: 0

私はオンラインで検索しましたが、なぜそれが言われているのか分かりません。ヘルプをよろしくお願いいたします。

はまた、単に理解のために、私は手動でこれをテストし、それが動作しますが、私はちょうどEasymockを使用して、それをテストしたい:

ReporterService reporterService = new ReporterService(); 
Reporter reporter = new Reporter(null,null,null); 

Whitebox.setInternalState(reporterService , "reporter", reporter); 
assertNotNull(Whitebox.getInternalState(reporterService, "reporter")); 

reporterService.onStop(); 
assertNull(Whitebox.getInternalState(reporterService, "reporter")); 
+1

実際にテストしようとしていることは不明です。あなたは記者が停止することをテストしていますか?もしそうなら、代わりに記者を嘲笑してください。 – chrylis

+1

一見すると、テストコードはよく見えます。したがって、次に調べるべきことは、あなたの質問に欠けていることです:テスト中のコード。 Whitebox.getInternalState()...がその引数でonStopを呼び出す必要がある場合でも、そのコードをここに投稿してください(http://stackoverflow.com/help/mcveを参照)。それがなければ助けができません! – GhostCat

答えて

-1

私は、これはあなたの問題を解決すべきだと思います。 1.最初にsetInternelState を使用してレポータオブジェクトを設定する必要があります。2.あなたのメソッドは、reporter.stop()を呼び出すことを期待しています。

以下のコードをご覧ください。最後にアサーションを追加することができます。

ReporterService reporterService1 = EasyMock.createMock(ReporterService.class); 
Reporter reporter = EasyMock.createMock(Reporter.class); 

Whitebox.setInternalState(reporterService , "reporter", reporter); 
reporter.onStop(); 
PowerMock.expectLastCall(); 

EasyMock.replay(reporterService1,reporter); 

reporterService1.onStop(); 

EasyMock.verify(reporterService1,reporter); 
+1

voidメソッドをモックするためにPowerMockは必要ありません。また、EasyMockに存在する 'expectLastCall()'は必要ありませんが、必須ではありません。静的インポートを使用することを強くお勧めします。あなたは 'reporter.onStop();を得るでしょう。リプレイ(reporterService1、レポーター); ' – Henri