我是测试的新手,我在测试下面的代码时遇到了这个问题,给出了空指针异常。
这是我的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();
}
}
“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));
}
}
错误:此行的java.lang.NullPointerException:
Matcher matcher = pattern.matcher(email);
在CommonFunction类的isEmailValid方法
中'模式'仍为空
这意味着在测试时我无法从android.util.Patterns访问“Patterns.EMAIL_ADDRESS”,EMAIL_ADDRESS是静态最终字段
提前致谢
答案 0 :(得分:3)
“Patterns.EMAIL_ADDRESS”来自 android.util .Patterns
如果您将其创建为标准单元测试(在/test
中),则JUnit不使用Android框架。任何特定于Android的方法都是存根的,无法运行。
您需要从头开始定义Patterns.EMAIL_ADDRESS
或在/androidTest
中将此测试作为Instrumentation测试运行。或者,请查看使用Robolectric,因为它提供了Android SDK的实现,以便在本地JUnit测试中使用。
答案 1 :(得分:2)
刚刚通过从 Patterns.EMAIL_ADRESS.matcher()
切换到 PatternsCompat.EMAIL_ADRESS.matcher()
解决了它。这应该有效。