2017-12-11 9 views
-1

私がテストしたい、次の機能があります:私はユニットテストを書いて、useridには、入力上の機能を提供したいJUnit 4 - ビューをモックする方法は?

public void attemptLogin() { 
     // Store values at the time of the login attempt. 
     String userid = mUserIdView.getText().toString(); 

     if (TextUtils.isEmpty(userid)) { 
      if (mCurrentUser != null) { 
       userid = mCurrentUser.getUserId(); 
      } 
     } 
} 

を。図から分かるように、関数がやっている:

mUserIdView.getText().toString(); 

をし、UIがロードされていないため、コードが失敗するあなたはそれをテストすることをお勧めだろうか (私たちは、そのためのUIテストを持っていますか)? ありがとう!

+0

'mUserIdView'を嘲笑し、' getText() 'メソッドに期待しています。 – Ivonet

+0

@Ivonet自分で説明してもらえますか? –

+0

実際、私は、以下の@Pau Trepatが成し遂げたことを簡単に述べました。依存性注入を使用している場合は、物事を模倣することができます(mockitoでの期待は 'いつ' :-))幸運 – Ivonet

答えて

3

dependency injectionを適用し、このビューがインスタンス化されたときにクラスに注入された場合、Mockを作成して注入することができます。

Text dummyText = new Text(myText) 
View mockedView= mock(View.class); 
when(mockedView.getText()).thenReturn(dummyText); 

しかし、あなたはいくつかの値が、私はあなたがそれを容易にするためにstubs or dummiesを使用お勧め取得したい場合。

編集:

class MyTextViewStub extends TextView { 

    private final CharSequence text; 

    public MyTextView(CharSequence text) { 
     this.text = text; 
    } 

    @Override 
    public CharSequence getText() { 
     return this.text; 
    } 

} 

そして、あなたは、あなたがテストしたいものをクラスにこのビューを注入。

+0

応答ありがとう!私はスタブが私にとって最高のソリューションだと思う。私はどのようにこの機能をスタブするのか把握できません。私にその事例を教えてもらえますか? –

+0

それは動作するはずです。 getText関数は最終的ではなく、あなたはそれを上書きすることができます。このオブジェクトの振る舞いに一貫性を持たせないためにメソッドをスタブ以上にしたい場合は注意してください –

+0

あなたの質問に答えることを検討したら、解決した質問としてマークしてください。 –

0

mock mUserIdViewを定義し、getText()が "返すものを返す"ようにする必要があります。次に、あなたのテストケースでは、あなたが初期化時に嘲笑Viewオブジェクトを挿入します

public class MyPresenter { 
    private final MyView myView; 
    private volatile CurrentUser mCurrentUser; 
public MyPresenter(MyView myView) { 
    this.myView = myView; 
} 

public void setCurrentUser(CurrentUser currentUser) { 
    this.mCurrentUser = currentUser; 
} 

public void attemptLogin() { 
    // Store values at the time of the login attempt. 
    String userid = myView.getText().toString(); 

    if (TextUtils.isEmpty(userid)) { 
     if (mCurrentUser != null) { 
      userid = mCurrentUser.getUserId(); 
     } 
    } 
} 
} 

:プレゼンターは、ログイン試行に取り組んでいるあなたのクラスを想定し

がビューから受信し、それは次のようになります。

関連する問題