gpt4 book ai didi

java - 如何对 Android RxJava 多线程进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:59 25 4
gpt4 key购买 nike

假设有一个按钮。

单击按钮将其禁用(ma​​inThread 线程),启动后台任务来加载数据(IO 线程)。加载数据后,该按钮将重新启用(ma​​inThread 线程)。

对于测试,通常将调度程序更改为立即,但这在我的情况下不起作用 - 按钮单击将被阻止,直到后台任务完成,我永远无法检查按钮在启动后台任务后是否被禁用。

除了单元测试之外,我还想在功能性 Espresso 测试中对此进行测试。

如何测试这个多线程 RxJava 案例?

最佳答案

你可以编写自己的ThreadFactory

ThreadFactory custom = new CustomThreadFactory();
ExecutorService executorService = Executors.newCachedThreadPool(custom); //or use newSingleThreadExecutor(..)
Scheduler customScheduler = Schedulers.from(executorService);

现在您可以使用此调度程序,而不会阻塞主队列,并且在需要新线程时被调用:

class CustomThreadFactory implements ThreadFactory {
public Thread lastT;
public int newThreadCounter = 0;
@Override
public Thread newThread(Runnable r) {
newThreadCounter++;
System.out.println("newThread called");
Thread lastT = new Thread(r); //or CustomThread(r)
return lastT;
}
}

您甚至可以进一步检测新线程 -

 class CustomThread extends Thread {
public CustomThread(Runnable r) {
super(r);
}
@Override
public void run() {
System.out.printf("About to run!");
super.run();
}
}
}

关于java - 如何对 Android RxJava 多线程进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817617/

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