Ich habe gerade mit dem Testen begonnen und ich verwende auch MVP
Muster in meinen Android-Apps.NPE beim Aufruf von Mock
Zur Zeit habe ich ein Moderator, der die folgenden Android-Code verwendet, um zu testen, ob eine E-Mail-Adresse gültig ist:
android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches()
Da es nicht möglich ist, es mit einem lokalen JVM
Unit-Test zu testen, habe ich beschlossen, es hinter sich zu verstecken eine Schnittstelle:
public interface EmailValidator {
boolean isValidEmail(CharSequence target);
}
und hier ist die Umsetzung:
public class EmailValidatorImpl implements EmailValidator {
@Override
public boolean isValidEmail(CharSequence target) {
if (target == null) {
return false;
} else {
return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
}
}
}
So jetzt mein Testcode ist:
public class SignUpPresenterTest {
@Mock
private SignUpMVP.View view;
@Mock
private EmailValidator validator;
private SignUpPresenter presenter;
private String email = "[email protected]";
private String password = "ABCDabcd";
private String username = "username";
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
presenter = new SignUpPresenter(view);
}
@Test
public void onButtonSignUpClicked() throws Exception {
when(validator.isValidEmail(email))
.thenReturn(true);
presenter.onButtonSignUpClicked(email, password, username);
verify(view).executeSignUpService();
}
}
und jetzt eine NPE Ich erhalte, wenn der Code über Anrufe: EmailValidatorImpl.isValidEmail()
java.lang.NullPointerException
at com.example.signup.helpers.EmailValidatorImpl.isValidEmail(EmailValidatorImpl.java:20)
at com.example.signup.SignUpPresenter.showErrors(SignUpPresenter.java:67)
at com.example.signup.SignUpPresenter.onButtonSignUpClicked(SignUpPresenter.java:25)
at com.example.signup.SignUpPresenterTest.onButtonSignUpClicked(SignUpPresenterTest.java:43)
und meine Fragen : Ist das nicht wie ich Mockito
verwenden soll? Kann ich irgendetwas tun, um meinen Code zu testen und NPE
zu vermeiden?