2016-09-05 6 views
0

私は、次のコードのために(getBatchId()とsendPost())静的関数をモックしようとしています:上記の方法のためのモック機能

public void doPost(){  
String batchId = Utility.getBatchId(); 
        Post post = new Post(batchId, userId, message); 
        String postJson = Utility.toJson(post); 
          Chat.sendPost(url,postJson) 
} 

ユニットテストケースコード:

mockStatic(Utility.class); 
     when(Utility.getBatchId()).thenReturn("demoBatchId1234"); 

     mockStatic(Chat.class); 
     when(Chat.sendPost(url,postJson)) 
       .thenReturn(CompletableFuture.supplyAsync(() -> HttpResponse.create())); 

私はとき(Utility.getBatchId())thenReturn( "demoBatchId1234")で、次の例外を取得しています。

org.mockito.exceptions.misusing.MissingMethodInvocationException:テストケース実行している()「モック上のメソッド呼び出し」でなければならない引数を必要とします。例えば、 (mock.getArticles())when then return(articles);最終/プライベート/イコール()/のhashCode()メソッド:あなたはのいずれかをスタブ

  1. :ので

    また、このエラーが表示される場合があります。これらのメソッドスタブされている/確認することはできません。モーフィング方法 は非公開の親クラスで宣言されていません。

  2. inside()擬似ではなく他のオブジェクトでメソッドを呼び出すとき。

+0

あなたは輸入品で、全テストクラスを提供することができ、それで... 'mockStatic'メソッドはどこから来ますか? PowerMockitoを使用していますか?その場合、 'PrepareForTest'アノテーションを使用しますか?参照してください:http://stackoverflow.com/a/21116014/2891426 –

+0

ありがとう@Nagy Vilmos ....問題は解決されました – avy

答えて

0

あなたが別のクラスから静的関数をモックとしたい場合、あなたは次のようにJUnitのを使用してテストするために、すべてのこれらのクラスを用意する必要があります。

**@PrepareForTest({Chat.class,Utility.class})** 
関連する問題