我有一个像这样的控制器类,它将一些执行程序传递给可运行的实例。这不是它的工作原理,但为了简单起见,我是这样做的。
package com.test.executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Controller {
private ExecutorService executor;
public Controller() {
executor = Executors.newCachedThreadPool();
}
public void doRun() {
MyRunner runner = new MyRunner(executor);
Thread myRunner = new Thread(runner);
myRunner.start();
}
public static void main(String[] args) {
new Controller().doRun();
}
}
runner 接收 executor 的实例,然后传递某些可调用对象。现在,可调用对象有点不同,因为一些可调用对象访问数据库/调用某些 Web 服务/文件系统
我在如何为这种情况编写合适的 JUnit 方面遇到了一些问题。我想拥有尽可能多的代码覆盖率。
package com.test.executor;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class MyRunner implements Runnable {
private ExecutorService executor;
public MyRunner(ExecutorService executor) {
this.executor = executor;
}
@Override
public void run() {
// TODO Auto-generated method stub
Future<Boolean> ret1 = executor.submit(new SampleCall1());
try {
ret1.get(5, TimeUnit.MINUTES);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
e.printStackTrace();
}
// Do other things
Future<List<String>> ret2 = executor.submit(new SampleCall2());
try {
ret2.get(5, TimeUnit.MINUTES);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
e.printStackTrace();
}
我的问题是为此编写单元测试的正确方法是什么。我正在收集一些关于如何对这门课进行单元测试的建议?我不确定在我的 junit/mockito 实例中要模拟什么。我应该嘲笑每个可调用的吗?然后为 MyRunner 创建一个测试用例。
我担心依赖性......因为我正在连接到数据库/网络服务/和文件系统,所以我想寻求一些建议。
皈依舞
天涯尽头无女友
相关分类