gpt4 book ai didi

Android 单元测试和接口(interface)

转载 作者:行者123 更新时间:2023-11-29 22:26:56 26 4
gpt4 key购买 nike

我在 Android 上实现单元测试时遇到了很多麻烦。作为一个简单的测试,我一直在尝试匹配从字符串资源中检索到的字符串:

String myString = myActivity.getResources().getString(R.string.testString));

但是,当进行单元测试时,这总是会导致空指针异常。这包括 robolectric 以及随 Android SDK 一起提供的 Junit 实现。

一种可能的解决方案是以类似于数据访问对象的方式处理资源检索。也就是说,创建一个可以访问字符串资源的接口(interface)。这将允许我模拟访问字符串资源。同样,我可以将 Activity 的非 android 依赖行为分离到一个单独的 pojo 类中。这将允许我使用标准 Java 测试工具运行单元测试。事实上,我可以潜在地将任何与 Android 基础设施相关的 Activity 委托(delegate)给一个接口(interface)。

为了进行单元测试,这似乎有很多困难。这值得么?有没有更可行的方法?

最佳答案

事实证明,问题是必须在实际测试方法中获取 Activity 。因此,例如,我的方法现在看起来像这样:

public void testGetActivityResourceString() {

Activity myActivity = this.getActivity();
String myString = myActivity.getResources().getString(R.string.hello);
Assert.assertNotNull(myString);
}

而之前我在设置中创建 Activity 。这个赠品在文档中:

“对于每个测试方法调用,直到第一次调用此方法时才会真正创建 Activity。”

这真的很麻烦。出于同样的原因,HelloWorldTest 的示例不起作用。

这是完整的条目:

公共(public)T getActivity()自:API 级别 3获取被测 Activity,必要时启动它。

对于每个测试方法调用,直到第一次调用此方法时才会真正创建 Activity。

如果您希望为您的 Activity 提供自定义设置值,您可以在第一次调用 getActivity() 之前调用 setActivityIntent(Intent) 和/或 setActivityInitialTouchMode(boolean)。在您的 Activity 开始后调用它们将无效。

注意:被测 Activity 可能无法从 UI 线程内启动。如果您的测试方法使用 UiThreadTest 注释,那么您的 Activity 将在您的测试方法运行之前自动启动。您仍然调用此方法以获得被测 Activity。

关于Android 单元测试和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627903/

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