2017-07-25 4 views
1
public class A{ 
    private final B b; 
    public void meth() { 
     //Some code 
     Integer a = b.some_method(a,fun(b)); 
     //Some code 
    } 
    private fun(int b) { 
    return b; 
    } 
} 
when(b.some_method(anyInt(),anyInt())).thenReturn(100) 

クラスAの単体テストを書くときに外部依存関係を模擬する方法上記の方法でモック依存関係を調べると、 "a"の値が期待通り100に割り当てられません。最終的なオブジェクトの外部依存関係をモックする方法はありますか?

+0

クラスB(Bmock = mock(B.class))のモックを作成したら、それを注入する必要があります(A a = new A(bmock))、またはsetterメソッド(A a = new A(); a.setB(bmock))を使用して、クラスAのインスタンスに変換します。 –

+0

まだ動作していないようですが、期待どおりに動作していません。 – user304611

答えて

0

powermockライブラリを使用すると、最終的なオブジェクトをモックできます。これはWikiの実装です。

テストクラス:

public class StateFormatter { 

private final StateHolder stateHolder; 

public StateFormatter(StateHolder stateHolder) { 
    this.stateHolder = stateHolder; 
} 

public String getFormattedState() { 
    String safeState = "State information is missing"; 
    final String actualState = stateHolder.getState(); 
    if (actualState != null) { 
     safeState = actualState; 
    } 
    return safeState; 
} 
} 

テストスニペット:

StateHolder stateHolderMock = createMock(StateHolder.class); 
StateFormatter tested = new StateFormatter(stateHolderMock); 

expect(stateHolderMock.getState()).andReturn(expectedState); 

     // PowerMock.replay(..) must be used. 
replay(stateHolderMock); 

あなたはfull sample hereを見つけることができます。

  1. Aクラスのコンストラクタをパラメータ化する必要があります。
  2. Bがpowermock
1

を使用して作成したモックオブジェクトを渡すことによって、オブジェクトを作成し、実際ヤクブの答えは正しいです。たぶんあなたはそれを行う方法を理解するための例が必要です。メインメソッドと私の例のコンストラクタを確認してください。

public class A { 
    private final B b; 

    public A(B b) { 
     this.b = b; 
    } 

    public void meth() { 
     //Some code 
     Integer a = b.some_method(5,fun(5)); 
     //Some code 
     System.out.println(a); 
    } 
    private int fun(int b) { 
     return b; 
    } 

    public static void main(String[] args) { 
     B b = Mockito.mock(B.class); 

     when(b.some_method(anyInt(), anyInt())).thenReturn(100); 

     new A(b).meth(); 
    } 

} 

コンストラクタでは、モックでBを設定する必要があります(メインメソッドの最後の3行目を参照)。 mainメソッドを実行すると、System.outの出力が100になります。