[英]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.