2017-03-18 11 views
1

質問がありますか?testableクラスから呼び出しメソッドをモックするにはどうすればよいですか?

testableクラスから呼び出されたメソッドからいくつかのデータを正しく返す必要がありますか?例えば

私は次の構造を有する:

Class SomeClass { 
    public void method1(){ 
    //some logic here 
    List<Object> howToReturnHereValues = gatData(); 
    //some logic here 
    } 
    public List<Object> getData(){ 

     return List<Object>; 

    } 
} 

は今、私はmethod1()をテストしたいが、私はList<Object>を返すコールgetData()を模擬する方法がわかりません。

お願いします。ここで説明するように

+0

Mockitoの「Spy」を見てください。これにより、 "実際の"オブジェクトのいくつかのメソッドをモックすることができます – Rouliboy

答えて

1

あなたは、スパイを使ってこれを行うことができます。https://static.javadoc.io/org.mockito/mockito-core/2.7.17/org/mockito/Mockito.html#13

例:これはロジックで使用することができ、「blaat」と「blabla」のリストを返します

@Test 
public void testMethod1() throws Exception { 
    SomeClass someClass = new SomeClass(); 
    SomeClass spy = Mockito.spy(someClass); 
    Mockito.when(spy.getData()).thenReturn(Arrays.asList("blaat", "blabla")); 
    spy.method1(); 
} 

あなたの方法で1。

+0

回答ありがとうございます – Andrew

2

今、私はmethod1()をテストしたいですが、私は呼ぶ方法を知らない Listを返すgetData()。

テスト中のクラスのパブリックメソッドを模擬することは、むしろ悪い考えです。

単体テストは、動作をテストし、依存関係を模擬すべきです。ここでは、テストされたクラスの振る舞いを模擬しながら、振る舞いの一部のみをテストします。

クラスは、あなたができた私たちの場合:いずれか

  • getData()と呼ばれるパブリックメソッドをあざけることなく、このメソッドをテストします。
  • またはgetData()パブリックメソッドを別のクラスに移動し、呼び出す各テストメソッドでgetData()メソッドのテストを繰り返さない場合は、この新しい依存関係をモックします。

クラスは変更できませんと嘲笑本当に必要と呼ばれる場合は、特定のメソッドのための嘲笑の挙動をシミュレートするために、テスト対象のオブジェクトにMockitoフレームワークのspy()方法を使用することができます。

+0

ありがとうアドバイスありがとう – Andrew

関連する問題