【问题标题】:junit tests to check creation of a filejunit 测试检查文件的创建
【发布时间】:2013-03-20 20:51:55
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 我会模拟用于实际创建文件的对象,并验证是否使用正确的参数调用了创建函数。恕我直言,它不再是单元测试,如果您实际上必须验证在文件系统中创建的文件...

标签: java junit4 mule


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您始终可以检查该文件是否存在,但这更像是集成测试而不是单元测试。

    推荐的方法是像这样创建某种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 是否被正确的Date 调用。

    您可以运行创建线程几秒钟,然后将传入的 Dates 收集到 Collection - 您的单元接下来需要检查 Dates 是否相隔 5 秒,并且是否存在正确的数量。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多