3

如果你有一个循环,它每 5 秒创建一次文本文件,并在创建时间戳之后命名,你可以创建一个 junit 测试,看看它是否被创建?你会怎么检查?

感谢您的帮助

4

2 回答 2

1

我会使用Mockito来模拟创作。并检查是否调用了create方法以及使用了哪个文件名。

于 2013-03-20T11:27:12.490 回答
0

您始终可以检查文件是否存在,但这比单元测试更多的是集成测试。

推荐的方法是像这样创建某种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- 您的单元现在需要检查Dates 是否相隔 5 秒并且它们的数量是否正确。

于 2013-03-20T11:39:28.913 回答