gpt4 book ai didi

android - 如何在单元测试中读取 Android 资源文件值

转载 作者:行者123 更新时间:2023-12-05 00:16:54 25 4
gpt4 key购买 nike

我有一个数组资源。我想进行测试以读取和解析 xml 资源中的值。这是代码。

<string-array name="names">
<item>Name1[?]200</item>
<item>Name2[?]125</item>
<item>Name3[?]142</item>
</string-array>

我想捕获上面的字符串资源并像下面的测试用例一样解析。但我无法实现。

@RunWith(MockitoJUnitRunner.class)
public class ReadAndParseNamesTest {

@Mock
private Context mockApplicationContext;
@Mock
private Resources mockContextResources;

@Test
public void readAndParseNamesTest() {

MockitoAnnotations.initMocks(this);

when(mockApplicationContext.getResources()).thenReturn(mockContextResources);

String[] marray = {"mock main class"};
when(mockContextResources.getStringArray(R.array.allah_names))
.thenReturn(marray);
for(int i = 0;i<marray.length;i++){
String[] deger = marray[i].split("[?]");
System.out.println("Deger "+i+": "+deger[0] + " "+ deger[1]);
}
}
}

我收到 java.lang.ArrayIndexOutOfBoundsException: 1 异常,因为我无法获取实际值。任何帮助将不胜感激。谢谢。

最佳答案

您不能使用简单的模拟来检索资源值。

想想您同时拥有英语和法语字符串资源的情况——它应该解析哪个值?英国人还是法国人?在运行纯 JUnit 测试时,测试运行器不知道这些资源或如何解决它们。

您可以考虑几种方法。

选项 1:不用担心值
要问的第一个问题是您到底在测试什么以及为什么。

您可能不需要测试 Android 框架是否正确加载资源值。该框架有自己的一套测试,资源加载通常是可靠的。

如果您可以相信您的资源值是正确的,您只需要验证您正在使用正确的字符串 ID (R.string.allah_names) 调用 getStringArray() >).

选项 2:运行插桩测试
如果您真的想测试是否加载了正确的值,那么您需要使用实际的 Android 框架运行某种仪器测试。

这些测试在物理设备或模拟器上运行。

如果您想走那条路,请查看 Build instrumented unit tests documentation .

选项 3:使用 Robolectric
作为插桩测试和纯 Java 测试之间的一种中间地带,Robolectric提供了一个“假”的Android SDK,可以解析资源,创建Activity等。

关于android - 如何在单元测试中读取 Android 资源文件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51408851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com