2012-02-18 6 views
0

特定の名前のファイルに書き込むメソッドがあります。私はこのメソッドをテストしなければならないのですか?Javaでファイルに書き込むメソッドのテスト

public void record(Object o){ 
    try{ 

     FileWriter fileStream = new FileWriter("data.txt", true); 
     BufferedWriter out = new BufferedWriter(fileStream); 

     out.write(o.toString()); 
     out.newLine(); 
     out.close(); 

    } catch (Exception e){ 
     System.err.println("Error: " + e.getMessage()); 
    } 
} 
+0

[FileUtils](http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html)を使用し、低レベルのユニットテストを避けることをお勧めします。 – yegor256

答えて

3

あなたがテストする必要があるかどうかは、プロジェクトのリードの質問です。それが決定されます場合は、いくつかのテストを書く必要があり、その後、私は、少なくともこれらのケース

  • をテストしますハッピーパス(後でファイルの内容を確認し、良いオブジェクトを書き込む)
  • null引数とどうなります(ファイルが存在しますか?何が入っていますか?閉じますか?)
  • メソッドが複数回呼び出されるとどうなりますか?
  • ファイルが既に存在した場合、しかし、質問への答え
+0

たとえば、ファイルが存在しない場合はキャッチされるか、tryキャッチが実際に例外をキャッチするかどうかをテストする必要がありますか? – FranXh

+0

*言語*が正しく動作するかどうかをテストする必要はありません。つまり、 'try'と' catch'が正しく動作すると仮定できます。しかし、問題があれば、どのような状態が残っているかなど、テストする必要があります。たとえば、 'toString()'メソッドが例外をスローすると、それが捕捉され、メッセージが標準出力に出力されます(実際には実際のコードでは決して決して決して*決して*決して行いません)。しかし、ファイルはまだ開かれていて、その後のこのメソッドの呼び出しは失敗します.Windows OSでは、とにかくこの理由があります。それらはテストで発見できるものです。 –

2

書き込み可能でない何か「私はこれをテストすべきか?」常に「はい」です。今、あなたは、方法を知ることができない、または方法を知ることができない、または時間がある、または許可される、またはしたくないかもしれないが、それは答えを変えない。

+0

非常に良い点:D。私はそれをテストするために何があるのか​​分からないと思う。 – FranXh

+0

他の回答には素晴らしい提案がある。私はあなたが実行することを期待している多くのプラットフォーム上で彼らの提案を試す必要があることを追加するだけです。 – colbadhombre

2

テストはいつでも歓迎しますが、この場合は徹底的なコードレビューが効果的かもしれません。それを発見するテストを記述することは困難である:それは例外をスロー場合o.toString()は例外

  • をスローした場合

    • outはつまり、ファイル記述子がリークする原因と、正しく閉じられていない可能性がありますスタックトレースが失われる(不正な例外処理)

    • Object otoString()を無視しない場合、メソッドはどのように動作するべきですか?

  • +0

    イェップ、これは正しいです。だからこそ私はここで何をテストするのか本当に混乱していた。 – FranXh

    +0

    @ user1181847:それほど悪くない。例えば、このメソッドがI/Oエラーをどのように報告するのか(実際に追加された改行)、ファイル名を調べるなど、ファイルの内容を調べることができます。しかし、厳密に言えば、これはもはや*単位ではありません*テスト。 –

    1

    カップルより多くのコードレビューの提案:out.close()は(自身ののtry/catch付き)finallyブロックにする必要があり、あなたはすでにファイルかどうかを確認することをお勧めします、正気のための入力パラメータをチェックすることをお勧めします存在し、書き込み可能です。また、oがそれ自身の改行を持つStringであればどうなりますか?

    関連する問題