3

FileWriter を呼び出すメソッドの単体テストを作成しようとしています。JUnit 4.8、Powermock、Mockito を使用しています。私がテストしている方法は次のようになります。

    public void methodToTest(String fileName, String text){

          File file = new File (someStaticString) //string is a static field of the class and the path is a dir

          if(!file.exist()){ //create dir}

          try{
               FileWriter fw = new FileWrite(file.getAbsolutePath() + "/" fileName, true);
               fw.write(text);
               fw.close();
          }
          catch(Exception e){
               e.printStackTrace 
          }
    }

file と fileWriter がメソッドの外部で宣言されている場合、mockito と powermock を使用してそれらをモックできるため、BDD を実践しているため、メソッドが呼び出された場合に発生する可能性のあるシナリオをテストできます。ただし、他の開発者が作成したため、テストしているコードを変更することはできません (単体テストを作成するのは開発者の責任だと思いますが)。

file や fw のようなメソッドの下でオブジェクトをモックする方法 (可能であれば) を考えています。if() または loop() の下に作成されたオブジェクトがある場合はどうですか? 彼らも嘲笑することができますか?

私が考えていることが不可能な場合、この種の方法をテストするためにどのような推奨事項を提案できますか? JUnit の TemporaryFolder についても学びました。これをファイルの代わりに使用して、フォルダとファイルを作成できますか?

ありがとう。

4

2 に答える 2

2

user.nameファイル名を「 .test-file」のようなものに変更し、ファイルを読み取って、終了したら削除することができます。

静的パスを変更できるとより便利ですが、これが問題の場合は、「../../../../../../../tmp/user.name.file」を次のように使用できますファイル名を追加し、静的パスを事実上無視します。;)

ところで:これcatch(Exception e)は非常に悪い考えです。IMHOは削除したほうがよいでしょう。

于 2012-08-09T07:40:57.240 に答える
1

メソッド本体内で作成され、メソッドの完了後に逆参照されるオブジェクトをモックするのは正しくないと思います。実装されているインターフェイスをテストすることは良い習慣ですが、実装の詳細自体はテストしません。あなたの場合、あなたは嘲笑することができsomeStaticString、嘲笑するよりもはるかに良いように思えFileますFileWriter

于 2012-08-09T07:42:46.870 に答える