2017-11-14 63 views
0

こんにちは私はmockitoを使用しようとしました。Mockitoエラー:ただし、このモックと正確に1つの対話がありました。

しかし、私はこの次のエラーを得た:ここ

Wanted but not invoked: 
loginView.showPasswordError(); 
-> at android.fanjavaid.com.tdd_android_login.LoginActivityTest.invalidPassword_notLoggedIn_showPasswordError(LoginActivityTest.java:84) 

However, there was exactly 1 interaction with this mock: 
loginView.showEmailError(); 
-> at android.fanjavaid.com.tdd_android_login.presenter.LoginPresenterImpl.validateInput(LoginPresenterImpl.java:23) 

は私の試験方法である:

@Test 
public void invalidEmail_notLoggedIn_showEmailError() { 
    LoginPresenter presenter = new LoginPresenterImpl(loginView, validator); 
    presenter.validateInput(user); 

    verify(loginView).showEmailError(); 
} 

@Test 
public void invalidPassword_notLoggedIn_showPasswordError() { 
    when(user.getEmailAddress()).thenReturn("[email protected]"); 

    LoginPresenter presenter = new LoginPresenterImpl(loginView, validator); 
    presenter.validateInput(user); 

    verify(loginView).showPasswordError(); 
} 

私はすでに有効な入力でinvalidPassword_notLoggedIn_showPasswordError()における電子メールの利用者を嘲笑が、私はまだそのエラーメッセージが表示されます。ここで

は私のプレゼンターの実装です:

@Override 
public void validateInput(User user) { 
    if (!validator.validateEmail(user.getEmailAddress())) { 
     view.showEmailError(); 
    } else if (validator.validatePassword(user.getPassword())) { 
     view.showPasswordError(); 
    } 
} 

私が行方不明ですか?数分で再び探索した後

+0

テストメソッドと実際のメソッドでオブジェクト* loginView *参照をデバッグしてチェックできますか?それらが異なっていれば、検証に失敗するのは正しいです。 – Raf

+0

あなたの問題に対する答えがありがとうございます!回答者がソート済みであることを知りやすくするために、将来の読者があなたの解決策を見つけるためには、あなたの解決策を編集して[自己回答]にしてください(https://stackoverflow.com/help/self-answer)あなたは後で受け入れることができます。 –

答えて

0

✔ANSWER

ありがとう、私は何か面白いものを見つけました。 1つのクラスにモックを追加するのを忘れました。私の下 は次のように詳細表示を隠すいくつかのクラスをモック:

@RunWith(MockitoJUnitRunner.class) 
public class LoginActivityTest { 

    @Mock User user; 
    @Mock LoginView loginView; 
    @Mock MyValidator validator; 

    LoginPresenter presenter; 

    @Before 
    public void beforeTest() { 
     presenter = new LoginPresenterImpl(loginView, validator); 
    } 

... 

あなたは私がバリデータクラスをモックことがわかります。

invalidPassword_notLoggedIn_showPasswordError()の方法では、電子メールの検証にモック値を追加していないため、エラーが発生しました。私はそれを嘲笑していない場合は

// Mock validation 
when(validator.validateEmail(user.getEmailAddress())).thenReturn(true); 

、それはおよそshowEmailError()を聞いてきますが、我々はちょうどshowPasswordError()

これを1つずつチェックする条件を使用して、私の実装を引き起こすことを確認、有効であるかどうかのチェック、電子メールから始め、次にパスワードが有効かどうかを確認します。 電子メールが存在せず、バリデータからの戻り値が存在しない場合、エラーが発生します。

だから私は真実(有効な電子メール)を返すために有効な偽のバリデータとして電子メールアドレスを模擬する必要があります。

これは私の説明であり、希望はモッキートを試してみてください。

関連する問題