gpt4 book ai didi

android - 无法从仪器测试中的 list 中获取应用程序名称

转载 作者:行者123 更新时间:2023-11-28 20:36:53 26 4
gpt4 key购买 nike

我的 Android 应用程序由几个模块组成。在我的数据模块中,我想获取应用程序的名称。

到目前为止,我是通过关注 this solution 来做到这一点的,它返回应用程序 list 中声明的​​应用程序名称:

class Registry {
public Registry(Context context) {
mContext = context;
}
public String getApplicationName() {
ApplicationInfo applicationInfo = mContext.getApplicationInfo();
int stringId = applicationInfo.labelRes;
return stringId == 0 ? applicationInfo.nonLocalizedLabel.toString() : context.getString(stringId);
}
private Context mContext;
}

这在运行我的应用程序时工作正常:applicationInfo.labelRes 返回一个字符串 ID,然后将其转换为字符串。

但是在我的仪器测试中行为不一样:applicationInfo.labelRes 返回 0;这会导致 NullPointerException,因为 applicationInfo.no​​nLocalizedLabel 为空。

我的测试如下:

@RunWith(AndroidJUnit4.class)
public class RegistryTest {

@Test
public void testGetApplicationName() {
Context context = InstrumentationRegistry.getContext();
Registry registry = new Registry(context);
String applicationName = registry.getApplicationName();
assertEquals("Foo", applicationName);
}
}

我的理解是测试未配置为使用应用程序 list 。有哪些选项可以让我在测试中配置适当的应用程序名称?

谢谢,

最佳答案

来自 InstrumentationRegistry.getContext() 的文档

Return the Context of this instrumentation's package

因此,它是您的测试应用程序的上下文。如果你检查 InstrumentationRegistry.getTargetContext()

Return a Context for the target application being instrumented

因此,您必须使用 InstrumentationRegistry.getTargetContext(),因为它表示应用程序的上下文。

编辑:

如前所述,如果您有模块 A 和 B,而 B 依赖于 A,那么您无法通过 B 中的插桩测试获取 A 的应用名称,因为最终 APK 将来自两个模块的 list 合并为一个模块,因此会覆盖来自 A 的名字。

关于android - 无法从仪器测试中的 list 中获取应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030923/

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