【发布时间】:2016-12-06 04:24:09
【问题描述】:
我开始在 android 中使用单元测试 我正在尝试测试一种使用以下方法的方法:
android.util.Patterns.EMAIL_ADDRESS.matcher(validEmail).matches()
当我在 build.gradle 中添加它时,它应该返回 true
testOptions {
unitTests {
returnDefaultValues = true
}
}
测试仍然会引发 NullPointerException。
我有两个问题: 1-我该如何解决这个问题? 2-我是否应该重新考虑我的设计并删除对模拟对象的 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 被注释时,它们也不例外。
【问题讨论】:
-
我不是你的家伙。它可以帮助了解 NPE 是什么。现在你必须使用调试器,找出什么值为 null
-
我也面临同样的问题。您通常需要模拟 Pattern 以尝试匹配它。但是你不能轻易做到这一点。这个教程很不错:(bytes.babbel.com/en/articles/2016-05-20-tdd-in-android.html) 并逐步展示如何让它工作
-
这个问题显然与被标记为存在的“重复”无关。
-
“它应该返回 true”是您感到困惑的地方。
unitTests.returnDefaultValues = true并不意味着android 框架方法会返回true。这意味着它们将返回默认值。True不是 matcher() 的默认值,返回对象的方法的默认值是null,这就是你得到 NPE 的原因。
标签: android unit-testing junit4