如何在没有Activity的Android JUnit测试中在UI线程中运行代码?

13

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

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


你的测试基类是什么? - Diego Torres Milano
1个回答

21

Android.OS.Handler可以更新UI。

要使用Handler,您需要将其子类化并重写handleMessage()以处理消息。

更新:

我正在使用monodroid,因此我不知道这是否完全可翻译,但是,

您可能可以使用

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

1
谢谢,它在普通的Android中也可以工作。 :) 在另一个线程中,我读到只需要在UI线程中实例化一个AsyncTask,然后创建其他AsyncTask时就会自动知道UI线程,这似乎非常有效!谢谢。 - The Science Boy
context can be taken from the app as follows, if no activity is available in the test scope: Application context = (Application)InstrumentationRegistry.getTargetContext().getApplicationContext(); - lucidbrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接