0

何らかの理由で、ファイルが変更されるクラスのプライベート変数にパス (//what/ever) が格納されています。そのため、テストすると、ファイルを変更しようとしますが、ファイルが存在しないため、例外がスローされます。

もちろん、単体テストのために、ファイルシステムにそのファイルを作成したくありません。

そのファイルそのものをモックして、//what/ever ではなく //my/folder に書き込むようにマシンに強制する方法はありますか?

4

1 に答える 1

0

ファイル自体をモックするのは難しいかもしれません。ただし、ファイル処理を抽象化して、管理するインターフェイスに抽象化し、テストの実行中にモック実装を挿入できます。もう 1 つの方法は、ファイル パスを公開して、テスト セットアップ コードの一部として変更できるようにすることです。

さらに別のアプローチには、JUnit 4 が含まれます。JUnit 4 では、テスト実行で一時ファイルとフォルダーを管理できます。作成した新しいファイルまたはフォルダーをクリーンアップします。

次のように実行できます。

public class MyFileTest {
    @Rule
    public TemporaryFolder testFolder = new TemporaryFolder();

    @Test
    public void testSomething() throws IOException {
        File tempFile = testFolder.newFile("myfile");

このようなものを使用すると、実際のファイルを作成できるため、コードでファイルを変更できるため、爆発することはないと思います。次の観点から、テストの範囲を正確に検討することをお勧めします。

  • 正確に何をテストしたいですか?
  • 正しい内容がファイルに書き込まれているということですか?
  • ファイル自体が変更されているということですか?

これらの質問のいくつかに答えると、正確にどのような種類のテストを作成する必要があるか、およびテスト要件を容易にするためにどのようなリファクタリングを行う必要があるかについて、正しい方向に進む可能性があります。

于 2013-10-01T16:26:31.133 に答える