簡體   English   中英

使用Mockito的Android單元測試

[英]Android unit test with Mockito

@RunWith(MockitoJUnitRunner.class)

public class RegisterMemberPresenterTest {
    @Mock
    private  RegisterModel mRegisterModel;
    @Mock
    private  VerifyModel mVerifyModel;
    @Mock
    private  RegisterMemberContract.View mView;
    @Mock
    private  RegisterMemberPresenter mRegisterMemberPresenter;
    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }
    @Test
    public void check_validPassword(){
        mRegisterMemberPresenter = new RegisterMemberPresenter(mRegisterModel,mVerifyModel,mView);
         mMemberPresenter.validPassword2("","123");
      verify(mView).setPasswordValidation(false, "error");

      mMemberPresenter.validPassword2("123","");
      verify(mView).setPassword2Validation(false, "error");

      mMemberPresenter.validPassword2("123","123");
      verify(mView).setPassword2Validation(true, null);

      mMemberPresenter.validPassword2("123","456");
      verify(mView).setPassword2Validation(false, "error");
    }
}

我對此測試有疑問。

在第4次測試中應該是“密碼不相同”,但是在我運行測試時仍然可以通過。

我知道視圖存在問題,因為當我將第4個測試移至第一個測試時,它將顯示錯誤消息,告訴我正確的是“密碼不相同”而不是“錯誤”。

public void validPassword2(String pwd, String pwd2) {
    if (pwd.isEmpty()) {
        mView.setPasswordValidation(false, "error");
        return;
    }
    if (pwd2.isEmpty()) {
        mView.setPassword2Validation(false, "error");
        return;
    }
    if (pwd.equals(pwd2)) {
        mView.setPassword2Validation(true, null);
    } else {
        mView.setPassword2Validation(false, "password is not same");
    }
}

verify(mock)調用之間存在一些干擾。

測試應該僅出於一個原因而失敗,因此,您應該將測試分為多個單獨的測試。

就像是

@RunWith(MockitoJUnitRunner.class)

public class RegisterMemberPresenterTest {
    @Mock
    private  RegisterModel mRegisterModel;
    @Mock
    private  VerifyModel mVerifyModel;
    @Mock
    private  RegisterMemberContract.View mView;
    @Mock
    private  RegisterMemberPresenter mRegisterMemberPresenter;
    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        mRegisterMemberPresenter = new RegisterMemberPresenter(mRegisterModel,mVerifyModel,mView);
    }

    @Test
    public void check_validPassword_blankFirstPassword(){
         mMemberPresenter.validPassword2("","123");
         verify(mView).setPasswordValidation(false, "error");
    }

    @Test
    public void check_validPassword_blankSecondPassword(){
         mMemberPresenter.validPassword2("123","");
         verify(mView).setPassword2Validation(false, "error");
    }

    @Test
    public void check_validPassword_validMatchingPasswords(){
         mMemberPresenter.validPassword2("123","123");
         verify(mView).setPassword2Validation(true, null);
    }

    @Test
    public void check_validPassword_nonMatchingPasswords(){
         mMemberPresenter.validPassword2("123","456");
         verify(mView).setPassword2Validation(false, "error");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM