Rai*_*rav 0 java testing android
我是测试新手,在测试下面的代码时遇到了这个问题,给出了空指针异常。
这是我的 CommonFunctions 类,其中包含电子邮件验证方法
源文件----->
import android.util.Patterns;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommonFunctions {
private Context context;
public CommonFunctions(Context context) {
this.context = context;
}
//to check whether email is valid or not
public boolean isEmailValid(String email) {
Pattern pattern = Patterns.EMAIL_ADDRESS;
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
}
Run Code Online (Sandbox Code Playgroud)
“Patterns.EMAIL_ADDRESS”来自 android.util.Patterns EMAIL_ADDRESS 是静态最终字段
我使用 Junit 和 Mockito 的测试代码
import android.content.Context;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
@RunWith(MockitoJUnitRunner.class)
public class CommonFunctionsTest {
@Mock
Context mMockContext;
@Test
public void isEmailValid() throws Exception {
CommonFunctions commonFunctions = new CommonFunctions(mMockContext);
assertThat(commonFunctions.isEmailValid("name@gmail.com"), is(true));
}
}
Run Code Online (Sandbox Code Playgroud)
错误:java.lang.NullPointerException 在这一行:
Matcher matcher = pattern.matcher(email);
Run Code Online (Sandbox Code Playgroud)
在 CommonFunction 类的 isEmailValid 方法中
“模式”仍然为空
这意味着在测试时我无法从 android.util.Patterns 访问“Patterns.EMAIL_ADDRESS”,EMAIL_ADDRESS 是静态最终字段
提前致谢
只是通过从 切换 Patterns.EMAIL_ADRESS.matcher()到 来解决它PatternsCompat.EMAIL_ADRESS.matcher()。这应该有效。
“Patterns.EMAIL_ADDRESS”来自android.util .Patterns
如果您将其创建为标准单元测试(在 参考资料中/test),则 JUnit 不使用 Android 框架。任何 Android 特定的方法都会被存根并且将无法运行。
您要么需要Patterns.EMAIL_ADDRESS从头开始定义自己,要么将此测试作为/androidTest. 或者,看看使用Robolectric,因为它提供了用于本地 JUnit 测试的 Android SDK 实现。