2016-08-01 207 views
5

我開始在Android的 單元測試,我已經試圖測試使用的方法工作:android.util.Patterns單元測試返回NullPointerException異常

android.util.Patterns.EMAIL_ADDRESS.matcher(validEmail).matches() 

,因爲我加入這應該返回true我的build.gradle

testOptions { 
    unitTests { 
     returnDefaultValues = true 
    } 
} 

仍然測試拋出一個NullPointerException。

我有兩個問題: 1-我該如何解決這個問題?我應該重新考慮我的設計並將android依賴關係移除到模擬對象上。

// @ LoginPresenterTest 
@Test 
public void clickOnLogin_loginSuccess(){ 
    loginPresenter.login(validEmail, validPassword); 
    verify(loginView).setLoginButton(false); 
} 
// LoginPresenter 
public void login(String email, String password) { 

    loginView.setLoginButton(false); 
    if(!isValid(email, password)){ 
     loginView.setLoginButton(true); 
     return; 
    } 
} 
// Validation 
public static boolean isEmailValid(String email){ 
    return !(email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()); 
} 

當android.utills被評論時,它們也不會例外。

+0

顯示您的代碼。 –

+1

我不是你的傢伙。這可能有助於瞭解NPE是什麼。現在你必須使用一個調試器來找出什麼值爲null – Jens

+1

我正面臨同樣的問題。你通常需要嘲笑該模式,以嘗試與之匹配。但是你不能輕易做到這一點。 本教程相當不錯:(http://bytes.babbel.com/en/articles/2016-05-20-tdd-in-android.html)並逐步展示如何讓它工作 –

回答

1

static methods沒有被嘲笑。您需要使用一些模擬框架,如mockitopowermock

+0

shouldn' t總是返回true http://tools.android.com/tech-docs/unit-testing-support 最後一節 –