在我的 Android 项目中,我有一个类HandlerThread:
public class MyHandlerThread extends HandlerThreads {
private Handler mHandler;
…
public void doAsyncTask(MyAsyncTask task) {
mHandler = new Handler(this.getLooper());
mHandler.post(task);
}
}
上述函数的参数类型MyAsyncTask
是类扩展Runnable
:
public abstract class MyAsyncTask implements Runnable {
@Override
public void run() {
doTask();
}
public abstract void doTask();
}
我有一个MyWorker
类,其函数使用MyHandlerThread
class:
public class MyWorker {
public void work() {
MyHandlerThread handlerThread = new MyHandlerThread();
handlerThread.start();
handlerThread.doAsyncTask(new MyAsyncTask() {
@Override
doTask() {
int responseCode = sendDataToServer();
}
});
}
}
我想使用Mockito对work()
类中的MyWorker
函数进行单元测试(例如,检查服务器responseCode
)。如何在Mockito中做到这一点?
答案 0 :(得分:0)
你想测试什么? MyWorker
? MyHandlerThread
?匿名的MyAsyncTask
?一切都好吗?可能是一个坏主意,特别是如果匿名MyAsyncTask
依赖于实际的服务器响应(这会阻止它成为一个好的单元测试,因为您正在测试整个系统)。所以,我会将整个部分分成几部分并单独测试所有这些部分。如果您已经这样做了,那么您可以使用集成测试对一个真实服务器检查多个部分。
要测试MyHandlerThread,您可以举例说明一个HandlerFactory,模拟它,从而确保正确调用处理程序。
public class MyHandlerThread extends HandlerThreads {
private HandlerFactory handlerFactory; // <- Add setter
…
public void doAsyncTask(MyAsyncTask task) {
Handler mHandler = handlerFactory.createHandler(this.getLooper());
mHandler.post(task);
}
}
易于测试的装置。 MyAsyncTask
简短而抽象,老实说,我不会对此进行测试。没有多少收获,因为它实际上做不了多少。和MyWorker
?取决于,但你可以,例如,为MyHandlerThread
添加一个getter / setter,允许你模拟它。将您的匿名类提取为真正的类可能会允许您测试那个,独立于其他类。