gpt4 book ai didi

android - Robolectric 3.0,未能测试启动 HandlerThread 的函数

转载 作者:可可西里 更新时间:2023-11-01 19:07:40 25 4
gpt4 key购买 nike

我有一个简单的类 Job 扩展了 HandlerThread :

public class Job extends HandlerThread{
public Job(String name) {
super(name);
}
...
}

然后,我有一个 JobUtils 类,它具有获取 Job & start() 的功能:

public JobUtils {
public JobUtils() {
}

// I unit test this function in my test class below
public Job getAndStartJob(String name) {
Job job = new Job(name);
job.start();
}
}

我使用 Robolectric 3.0 在我的单元测试中,我测试了 JobUtils 类的 getAndStartJob(String name) 函数:

@RunWith(RobolectricTestRunner.class)
public class TestJobUtils{
@Test
public void testGetAndStartJob() {
JobUtils jobUtils = new JobUtils();

// error here
jobUtils.getAndStartJob(“test-job”);

}
}

当我运行我的单元测试代码时,我得到了错误

Exception in thread "test-job” java.lang.NullPointerException
at org.robolectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:70)
at org.robolectric.shadows.ShadowLooper.doLoop(ShadowLooper.java:85)
at org.robolectric.shadows.ShadowLooper.loop(ShadowLooper.java:76)
at android.os.Looper.loop(Looper.java)
at android.os.HandlerThread.run(HandlerThread.java:60)

看起来 Robolectric 无法启动 HandlerThread(我代码中的 job 实例),或者我错过了什么?如何摆脱这个问题?

最佳答案

我遇到了类似的问题,不确定你的原因是否相同,因为我使用了 RobolectricGradleTestRunner 而你没有发布整个测试方法体。在我的例子中,Robolectric 的应用程序 (RuntimeEnvironment.application) 在 HandlerThread 开始执行之前被设置为 null(NPE 的来源),因为测试方法提前结束。

解决方法是在测试方法结束时等待所有计划的可运行:

    Robolectric.flushBackgroundThreadScheduler();
Robolectric.flushForegroundThreadScheduler();

关于android - Robolectric 3.0,未能测试启动 HandlerThread 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34227018/

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