当前位置: 首页 > 面试题库 >

从finish()之后的活动获取结果;在Android单元测试中

任繁
2023-03-14
问题内容

我目前正在编写一些Android单元测试,虽然我已经按照自己想要的方式完成了大多数工作,但有一件事让我有些困惑。

我的测试活动中包含以下代码:

Intent result = new Intent();
result.putExtra("test", testinput.getText().toString());
setResult(Activity.RESULT_OK, result);
finish();

我试图弄清楚如何使用Instrumentation(或其他工具)来读取活动的结果,或者在活动完成后获得意图。有人可以帮忙吗?


问题答案:

您可以使用反射并直接从活动中获取值。

protected Intent assertFinishCalledWithResult(int resultCode) {
  assertThat(isFinishCalled(), is(true));
  try {
    Field f = Activity.class.getDeclaredField("mResultCode");
    f.setAccessible(true);
    int actualResultCode = (Integer)f.get(getActivity());
    assertThat(actualResultCode, is(resultCode));
    f = Activity.class.getDeclaredField("mResultData");
    f.setAccessible(true);
    return (Intent)f.get(getActivity());
  } catch (NoSuchFieldException e) {
    throw new RuntimeException("Looks like the Android Activity class has changed it's   private fields for mResultCode or mResultData.  Time to update the reflection code.", e);
  } catch (Exception e) {
    throw new RuntimeException(e);
  }
}


 类似资料:
  • 我有一个和一个。当接收到广播时,两个活动都需要完成。但是,如果位于之上,下面的代码将导致黑屏。

  • 如果它没有返回任何东西,是否可能以某种方式测试它是否停止了这个if语句?我的意思是,我想把某种断言,检查“好吧,上下文是空的,所以它在这个返回时停止了”。 当然,问题是类是空的,为什么我想测试这种方法可能会有问题,但我想听听一些可能性。

  • 问题内容: 我有基于gradle的带有junit测试的Java项目,我正在为其构建CI工作。我使用松弛Slack Notification插件成功地将松弛与Jenkins集成在一起。 Jenkins版本:2.173 松弛通知版本:2.20 jenkins CI是脚本化管道,具有以下代码: SlackNotifier是一个包含以下代码的库: buildUnitTestSlackNotificatio

  • 问题内容: 有什么方法可以通过teardown()方法获取测试结果?我想根据结果在测试后进行清理。 在junit文档中找不到太多详细信息。 问题答案: 与您要求的最接近的东西可能是TestWatcher规则。那将不能让您访问返回的结果或其他任何东西,但是您可以使用它(或创建自己的TestRule并与Description对象结合使用,可以对方法进行不同的注释,以指示需要进行哪种清理。