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
Date
作成スレッドを数秒間実行して、Date
渡された sを収集することができCollection
ます。次に、ユニットはDate
s が 5 秒離れていること、およびそれらの数が正しいことを確認する必要があります。