1

次のメソッドをテストしたいのですが、具体的には write メソッドと close メソッドが呼び出されたことを確認したいと思います (書き込みチェックの場合、書き込まれた内容は期待どおりでした)。本当のソース コードは Java で、Groovy でテストを書いています。デフォルトのコンストラクターがないため、マップ強制を使用できません。mockFor と metaClass を試しましたが、ソースを groovy に変更し、単体テストを groovy に変更した場合にのみ機能します。このコードをテストするためのオプションはありますか? 以下のコードはグルーヴィーですが、Java メソッドのソースは非常に似ています。実際のヘッダーが生成され、いくつかの日付ロジックが実行され、結果が書き込まれます。

class TestWriter {
    protected void writeResultToXMLFile(String response,FileWriter fw, Date today){
        String header = "header";
        try{
            fw.write(header);
            fw.close();
        } catch (IOException ioe){
            String errorMessage = "Unable to write to file";
            try{
                fw.close();
            }catch (IOException ioException){
                errorMessage += ", Error attempting to close the file";
            }
        }
    }
}
4

2 に答える 2

4

コードクラス FileWriter を Writer インターフェースに置き換えると、ライターのモック実装を作成し、必要なすべての呼び出しを受け取ることをテストできます

于 2012-08-22T07:12:09.820 に答える
2

もう 1 つの可能性は、Mockitoのようなフレームワークを使用してモックFileWriterを作成verifyし、正しい値が渡されるようにすることです。

次のようになります。

// create the mock
FileWriter mock = mock(FileWriter.class);

// call the method under test and pass in the mock 

// verify the intended behaviour
verify(mock).write("the expected text");
verify(mock).close();

お役に立てれば。

于 2012-08-22T07:44:19.443 に答える