【问题标题】:How do I run code in the UI thread in an Android JUnit test without an Activity?如何在没有 Activity 的情况下在 Android JUnit 测试的 UI 线程中运行代码?
【发布时间】:2011-04-26 13:50:22
【问题描述】:

我有一个依赖AsyncTask 检索数据的数据库组件。一旦在应用程序中使用,它将始终从 UI 线程调用,但我如何在 JUnit 测试中做到这一点而不实例化 Activity(我只是没有活动,也不应该只为测试目的)?

runOnUiThread() 是一种活动方法,因此不是一个选项。有没有办法通过从 Android 测试库中获取一个或通过实现 MockUiThread 来模拟 UI 线程?

【问题讨论】:

  • 你的测试的基类是什么?

标签: android multithreading testing user-interface junit


【解决方案1】:

Android.OS.Handler 应该可以更新 ui。

要使用处理程序,您必须对其进行子类化并覆盖 handleMessage() 来处理消息

更新:

我用的是monodroid,所以我不知道这是否完全可以翻译,但是,

你可以使用

new Handler(context.getMainLooper()).post(runnable);

【讨论】:

  • 谢谢,它也适用于普通的 Android。 :) 在另一个线程中,我读到我真正需要做的就是在创建任何其他线程之前在 UI 线程中实例化一个 AsyncTask,以下线程将自动知道 UI 线程,它似乎工作得很好!谢谢。
  • context 可以从应用程序中获取,如果在测试范围内没有可用的活动:Application context = (Application)InstrumentationRegistry.getTargetContext().getApplicationContext();
猜你喜欢
  • 2023-01-19
  • 2023-04-04
  • 2018-12-21
  • 2011-02-11
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
相关资源
最近更新 更多