验证电子邮件时出现 NullPointerException

NullPointerException on validating email

我正在编写一个单元测试来检查电子邮件验证逻辑。当您 运行 测试时,逻辑会抛出空指针异常。但它在模拟器上运行良好。有人可以帮我解决这个问题吗?

public static String validate(String email, String password) {
        if (email == null || email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            return "Enter valid email address";
        }
        if (password.isEmpty() || password.length() < 4) {
            return "Password should be between 4 and 10 alphanumeric characters";
        }
        return null;
}

下面是我的单元测试。

@Test
public void validateShouldReturnMessageIfYouPassAnInvalidEmail() throws Exception {
    String validateMessage = LoginService.validate("abcdef", "password");
    assertEquals("Enter valid email address", validateMessage);
}

我得到的错误是,

java.lang.NullPointerException
at com.tryout.hemanth.expensetracker.service.LoginService.validate(LoginService.java:11)

android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() 自 API 级别 8 以来存在,可能是您的模拟器早于此。

所以我建议按照 this 答案中的建议添加自定义 EMAIL_ADDRESS_PATTERN 字符串并检查它

if (email == null || email.isEmpty() || !EMAIL_ADDRESS_PATTERN.matcher(email).matches()){
     return "Enter valid email address";
}

如果Patterns.EMAIL_ADDRESS不符合您的要求,

创建您的自己的正则表达式模式以便更好地使用。

示例请参考this EMAIL ADDRESS regex

使用 PatternsCompat 而不是 Patterns

试试这个,这对我有用:

fun isValidEmail(email:String?):Boolean {
return when{
    email.isNullOrEmpty()-> false
    else-> PatternsCompat.EMAIL_ADDRESS.matcher(email).matches();
}

}

测试用例:

 @Test
fun validate_email_invalid() {
    val email = "a"
    Assert.assertEquals(false, isValidEmail(email))
}