如果你有一个循环,它每 5 秒创建一次文本文件,并在创建时间戳之后命名,你可以创建一个 junit 测试,看看它是否被创建?你会怎么检查?
感谢您的帮助
我会使用Mockito来模拟创作。并检查是否调用了create方法以及使用了哪个文件名。
您始终可以检查文件是否存在,但这比单元测试更多的是集成测试。
推荐的方法是像这样创建某种FileCreator
接口
public interface FileCreator {
void createFile(Date date);
}
创建格式化时间的实现,然后进行单元测试 - 验证您调用createFile
文件时是否确实创建了文件。这应该很简单。
现在,在创建文件的类中使用它 - 假设它看起来像这样
public class FileCreationManager {
private final FileCreator fileCreator;
private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
private Future<?> taskHandle;
public FileCreationManager(final FileCreator fileCreator) {
this.fileCreator = fileCreator;
}
public void startFileCreation() {
taskHandle = executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
fileCreator.createFile(new Date());
}
}, 0, 5, TimeUnit.SECONDS);
}
public void stopFileCreation() {
taskHandle.cancel(false);
executorService.shutdown();
try {
executorService.awaitTermination(1, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
您的单元测试可以传入 的虚拟实现,FileCreator
您只需要检查createFile
是否使用 right 调用Date
。
您可以运行创建线程几秒钟并将Date
传入的 s 收集到 a Collection
- 您的单元现在需要检查Date
s 是否相隔 5 秒并且它们的数量是否正确。