2016-05-18 3 views
4

電子メール検証ロジックをチェックするための単体テストを作成しています。テストを実行すると、ロジックがnullポインタ例外をスローしています。しかし、エミュレータで正常に動作します。誰かが私を助けることができるこれを解決する?電子メールの検証時にNullPointerExceptionが発生する

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) 
+1

「LoginService」の内容は何ですか? –

+0

@ShreeKrishna私は検証を行うバリデーションメソッドを持っています。私は自分のログインを質問に追加しています。 –

+0

あなたのメソッドを見せてくださいLoginService.validate –

答えて

1

android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()前、その後、これをあるあなたのエミュレータであってもよいし、APIレベル8以降が存在します。

だから私は、Patterns.EMAIL_ADDRESSを使用しないでくださいthis答えで提案されているように、カスタムEMAIL_ADDRESS_PATTERN文字列を追加提案し、

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

しかし、同じコードはエミュレータで正常に動作します。なぜ私はJunitを使って実行するとアンドロイドがnullであるのか分かりません。 –

+0

あなたはJUNIT 4のような最新のものを使用していますか?また、デバイスのAPIレベルに互換性がありますか? [https://developer.android.com/topic/libraries/testing-support-library/index.html#ajur-junitを参照してください]テストの要件とルールを参照してください。 –

2

ようにそれを確認してください。

複雑な正規表現を使用して電子メールを検証しています。

独自の正規表現パターンを作成してください。

関連する問題