契約義務プログラムをテストする必要があります。
書かれているようにこのメソッドをテストする簡単な方法は見当たりません。これは、単一責任の原則に違反しており、単に多くのことを行っているだけです。
次の責任を新しいメソッドまたはクラスに安全に抽出する方法を知っています。
public void askUserPathAndWord() {
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(System.in));
String path;
String whatFind;
BlockingQueue<File> queue = new LinkedBlockingQueue<File>();
try {
System.out.println("Please, enter a Path and Word"
+ "(which you want to find):");
System.out.println("Please enter a Path:");
path = bufferedReader.readLine();
System.out.println("Please enter a Word:");
whatFind = bufferedReader.readLine();
if (path != null && whatFind != null) {
File endOfWorkFile = new File("GameOver.tmp");
CountDownLatch latch = new CountDownLatch(2);
FolderScan folderScan = new FolderScan(path, queue, latch,
endOfWorkFile);
FileScan fileScan = new FileScan(whatFind, queue, latch,
endOfWorkFile);
Executor executor = Executors.newCachedThreadPool();
executor.execute(folderScan);
executor.execute(fileScan);
latch.await();
System.out.println("Thank you!");
} else {
System.out.println("You did not enter anything");
}
} catch (IOException | RuntimeException e) {
System.out.println("Wrong input!");
e.printStackTrace();
} catch (InterruptedException e) {
System.out.println("Interrupted.");
e.printStackTrace();
}
}
Qustions:
次のステップを安全に実行する方法:
- ユーザーに単語とパスを尋ねます。
- 単語を指定して、正しいパラメーター(ファクトリ)を使用してFileScanを作成します。
- パスを指定して、正しいパラメーター(ファクトリ)を使用してFolderScanを作成します。
- 2つのランナブルと1つのラッチが与えられた場合、ExecutorServiceを作成し、それらをキューに入れて、ラッチを待ちます。