1

以下のコードがディレクトリを新しいディレクトリに正常にコピーしたかどうかをテストするJUnitテストケースを作成したいと思います。

File origPath = new File("/sourceDir/");

File newPath = new File("/destDir/");

try {
    FileUtils.copyDirectory(origPath, newPath);
    } catch (Throwable e) {

    }

上記のコードをテストするためのJUnitテストまたはモックを作成する方法を提案してください。

4

4 に答える 4

4

TemporaryFolderルールが必要です。

@Rule
public TemporaryFolder tempFolder = new TemporaryFolder();

次に、新しいフォルダを作成します。

File source = tempFolder.newFolder();

次に、copyDirectory-methodを呼び出します。

FileUtils.copyDirectory(source.getAbsolutePath(), source.getParent() + "/dest");

次に、フォルダが存在するかどうかを確認できます。

new File(tempFolder.getRoot(), "dest").exists()
于 2013-01-16T12:01:12.757 に答える
3

簡単な解決策の1つは、からのすべてのファイル/sourceDir/がディレクトリに存在するかどうかを確認すること/destDir/です。

File origPath = new File("/sourceDir/");
File newPath = new File("/destDir/");
for (File file : origPath.listFiles()) {
    assertTrue(new File(newPath, file.getName()).exists());
}
于 2013-01-16T11:59:46.627 に答える
3

モックすることはできますが、これはいくつかのメソッドを呼び出すことをテストするだけであり、実際に機能するわけではありません。つまり、統合テストのように見え、次のようないくつかの実際のテストを作成するだけです。

  1. 偽のディレクトリ( "Asdlkjslajfrhg")が存在しないことを確認し、それをコピーして、正しい例外が発生することを確認してください
  2. 偽のディレクトリを作成してコピーし、新しいディレクトリが作成されて空であることを確認します
  3. 偽のディレクトリとデータを含むいくつかのファイルを作成し、ディレクトリをコピーして、新しいディレクトリが作成され、同じ内容のすべてのファイルが含まれていることを確認します
  4. 各テストの後に必ずすべてをきれいにしてください

注:最近のバージョンのJUnitにはTemporaryFolderクラスが含まれています。これは、「偽のディレクトリ」部分のほとんどを処理するのに役立ちます。例については、この投稿も参照してください。

于 2013-01-16T12:00:20.927 に答える
2

copyDirectoryテストでモックを使用するメソッドに非IOロジックが多数ない限り、コード呼び出しが含まれる操作を実行するだけでテストするため、意味がありません。

したがって、テストでは次のことを行う必要があります。

  • ソースディレクトリを作成し、そこにファイルを書き込みます。
  • 宛先ディレクトリを作成します。
  • メソッドを呼び出しcopyDirectoryます。
  • 宛先ディレクトリの内容を読み取り、内容をアサートします。
  • 掃除。
于 2013-01-16T12:00:25.813 に答える