android - 单元测试Android,从资源中获取字符串

标签 android testing junit mockito

我正在尝试对 Android 应用程序进行单元测试,我需要从 res.string 资源中获取一个字符串。我要测试的类是一个 POJO 类。我正在用两种语言开发应用程序,因此,我需要从资源中获取一个字符串。问题是我无法获得上下文或 Activity ,这可能吗?我知道通过仪器测试我可以做到,但我需要在进行仪器测试(黑盒测试)之前测试一些功能(白盒测试)。 这是我必须测试的功能:

public void setDiaByText(String textView) {
    getll_diaSeleccionado().clear();
    if (textView.contains(context.getResources().getString(R.string.sInicialLunes))) {
        getll_diaSeleccionado().add(0);
        getIsSelectedArray()[0] = true;
        getI_idiaSeleccionado()[0] =1;

    } else
    {
        getIsSelectedArray()[0] = false;
        getI_idiaSeleccionado()[0] =0;
    }
}

这是测试:

@Test
public void setDiaByTextView() {
    String texto = "L,M,X,J,V,S,D";

    alertaPOJO.setDiaByText(texto);

    assertEquals(alertaPOJO.getIsSelectedArray()[0], true);
    assertEquals(alertaPOJO.getI_idiaSeleccionado()[0], 1);
}

尝试执行 context.getResources().getString(R.string.sInicialLunes)) 时崩溃

如果我用 'Mon' 而不是 context.getResources().getString(R.string.sInicialLunes)) 或 'L' 它就可以完美地工作,所以可以获得上下文或访问资源文件夹的 Activity ?

我正在使用 Mockito 进行测试,setUp 函数是:

@Before
public void setUp() throws Exception {

    MockitoAnnotations.initMocks(this);
    mContext = Mockito.mock(Alerta.class);
    Mockito.when(mContext.getApplicationContext()).thenReturn(mContext);

    alertaPOJO = new AlertaPOJO();
}

谢谢

最佳答案

如果您使用 Context 只是为了获取 String 资源,我会只模拟 getResources().getString() 部分,例如这(请参阅 JUnit4 表示法):

@RunWith(MockitoJUnitRunner.class)
public class AlertaPOJOTest {

  @Mock
  Context mMockContext;

  @Test
  public void setDiaByTextView() {
     String texto = "L,M,X,J,V,S,D";
     when(mMockContext.getString(R.string.sInicialLunes))
       .thenReturn(INITIAL_LUNES);


     alertaPOJO.setDiaByText(texto);

     assertEquals(alertaPOJO.getIsSelectedArray()[0], true);
     assertEquals(alertaPOJO.getI_idiaSeleccionado()[0], 1);
   } 
}

坚持使用 JVM 测试的原因有很多,最重要的是,它们运行得更快。

关于android - 单元测试Android,从资源中获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39576760/

相关文章:

android - 如何从 Mainactivity 类中的每个函数检索 sqlite 数据库

android - Appengine连接android项目

unit-testing - 每个单元测试应该测试多少?

java - 参数化测试: selectively run for only one data point

asp.net - Junit 与 .Net 技术

android - 输入文本布局中的错误还是我的错误?

android - 我可以在我的 Android 工作室的项目资源管理器中隐藏某些文件和文件夹吗?

angular - Karma 输入参数单元测试

javascript - 如何在 e2e Protractor 中读取 ui 中的动态值

gradle - 如何在 Gradle 中使用 JUnit 5 控制台启动器标志