我正在尝试对一个android应用程序进行单元测试,需要从res.string资源中获取一个字符串。我想要测试的类是一个POJO类。我正在用两种语言进行应用程序,因此,我需要从资源中获取一个字符串。问题是我无法获取上下文或活动,可能吗?我知道通过Instrumentation测试我可以做到这一点,但是我需要测试一些函数(白盒测试),然后再进行仪器测试(黑盒测试)。下面是我必须测试的函数:
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'它的工作完美,是可能的,以获得上下文或活动,以访问资源文件夹?
我正在使用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();
}
谢谢
4条答案
按热度按时间erhoui1w1#
如果您使用
Context
只是为了获取String
资源,我会像下面这样只模拟getResources().getString()
部分(参见JUnit4表示法):继续使用JVM测试的原因有很多,最重要的一个原因是,它们运行得更快。
ioekq8ef2#
未测试:使用下面的方法是否有效,并且可能使用targetContext?
ltqd579y3#
当你使用JVM单元测试时,你没有真正的android上下文。对于你的情况,也许你可以尝试Android Instrumentation Test,它通常在你项目的“androidTest”目录中实现。
0kjbasz64#
如果您使用MockK,它是相同的。
另请参阅Skip a parameter in MockK unit test, Kotlin以获取任何数据的字符串资源的结果。