2013-03-20 100 views
1

如果您有一个循环每隔5秒创建一个文本文件并将其命名为它创建的时间戳,那么您可以创建一个junit测试,以查看它是否已创建?你会如何检查?junit测试检查文件的创建

感谢您的帮助

+1

我会嘲笑用于实际创建文件的对象,并验证创建函数是否被调用了正确的参数。恕我直言,它不是一个单元测试了,如果你真的需要验证文件系统中创建的文件... – ppeterka 2013-03-20 11:27:01

回答

0

我会嘲笑使用Mockito创建。并检查是否调用create方法以及使用哪个文件名。

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是用右边的Date调用。

您可以运行几秒钟创建线程和收集Date秒后在成Collection - 你单位旁边现在需要检查Date s为5秒分开,有他们的权数。