2016-08-01 107 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 最后一节 –