4

FileInputStreamが閉じられているかどうかをチェックするJUnitテストを作成するにはどうすればよいですか?

次のコードを検討してください。

import java.io.FileInputStream;

class FileInputStreamDemo {

  public static void main(String args[]) throws Exception {
    FileInputStream fis = new FileInputStream(args[0]);

    // Read and display data
    int i;
    while ((i = fis.read()) != -1) {
      System.out.println(i);
    }

    fis.close();

  }
}

私はこのようなテストを書きたいと思います:

@Test
public void test() {
  FileInputStreamDemo.main("file.txt");
  // test here, if input stream to file is closed correctly
}

このコード例はあまり意味がありませんが、FISが閉じられているかどうかをチェックするJUnitテストを作成する方法を説明します。(可能であれば:元のFISオブジェクトへの参照もありません)

4

1 に答える 1

3

ファイルを読み取るジョブを実行するMyFileReaderという別のクラスを作成する必要があります。次に、新しいクラスをインスタンス化し、その中のメソッドを呼び出して正しく動作することをテストするクラスMyFileReaderTestを作成します。fisをMyFileReaderクラスの保護されたメンバーにすると、テストはfisにアクセスして、閉じられていることを確認できます。

FileInputStreamを使用する代わりに、InputStreamのようなインターフェイスを使用して、実際にはファイルを作成しないが、close()が呼び出されたかどうかを追跡するMockInputStreamを作成できるようにする必要があります。次に、テストコードでそれをテストできます。

于 2012-07-11T18:34:47.070 に答える