何らかの理由で、ファイルが変更されるクラスのプライベート変数にパス (//what/ever) が格納されています。そのため、テストすると、ファイルを変更しようとしますが、ファイルが存在しないため、例外がスローされます。
もちろん、単体テストのために、ファイルシステムにそのファイルを作成したくありません。
そのファイルそのものをモックして、//what/ever ではなく //my/folder に書き込むようにマシンに強制する方法はありますか?
ファイル自体をモックするのは難しいかもしれません。ただし、ファイル処理を抽象化して、管理するインターフェイスに抽象化し、テストの実行中にモック実装を挿入できます。もう 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");
このようなものを使用すると、実際のファイルを作成できるため、コードでファイルを変更できるため、爆発することはないと思います。次の観点から、テストの範囲を正確に検討することをお勧めします。
これらの質問のいくつかに答えると、正確にどのような種類のテストを作成する必要があるか、およびテスト要件を容易にするためにどのようなリファクタリングを行う必要があるかについて、正しい方向に進む可能性があります。