假设有一个按钮。
单击按钮将其禁用(mainThread 线程),启动后台任务来加载数据(IO 线程)。加载数据后,该按钮将重新启用(mainThread 线程)。
对于测试,通常将调度程序更改为立即,但这在我的情况下不起作用 - 按钮单击将被阻止,直到后台任务完成,我永远无法检查按钮在启动后台任务后是否被禁用。
除了单元测试之外,我还想在功能性 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();
}
}
}
我是一名优秀的程序员,十分优秀!