2013-03-20 91 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秒分開,有他們的權數。