【问题标题】:Testing method which access static final field locally inside method gives error在方法内部本地访问静态最终字段的测试方法会出错
【发布时间】:2017-05-18 10:31:12
【问题描述】:

我是新来的测试,我在测试下面的代码时遇到了这个问题,给出了空指针异常。

这是我的 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 是静态最终字段

提前致谢

【问题讨论】:

    标签: java android testing


    【解决方案1】:

    “Patterns.EMAIL_ADDRESS”来自 android.util.Patterns

    如果您将其创建为标准单元测试(/test),则 JUnit 不使用 Android 框架。任何特定于 Android 的方法都会被存根,并且将无法运行。

    您要么需要自己从头开始定义Patterns.EMAIL_ADDRESS,要么在/androidTest 中将此测试作为 Instrumentation 测试运行。或者,看看使用 Robolectric,因为它提供了 Android SDK 的实现以用于本地 JUnit 测试。

    【讨论】:

      【解决方案2】:

      刚刚通过从 Patterns.EMAIL_ADRESS.matcher() 切换到PatternsCompat.EMAIL_ADRESS.matcher() 解决了这个问题。这应该可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2015-03-19
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多