JUnitについて少し学びたいので、自分が取り組んでいる小さなプロジェクトにJUnitを実装したいと思います。
私が読んだチュートリアルはすべて、特定の出力を持つメソッドを参照しています。
私の場合、出力はファイルですが、どうすればこれを行うことができますか?簡単な例はありますか?これで私を助けることができるアプローチはありますか?
ファイルは、voidプライベートメソッドによってビルドされた生のテキストファイルです。
特定の入力セットに対して正しい出力ファイルを取得し、それらの入力を使用してvoidメソッドを呼び出すテストを設定し、検証済みの出力ファイルをメソッドによって生成されたものと比較する必要があります。メソッドの出力先を指定する方法があることを確認する必要があります。そうしないと、テストが非常に脆弱になります。
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Test
public void testXYZ() {
final File expected = new File("xyz.txt");
final File output = folder.newFile("xyz.txt");
TestClass.xyz(output);
Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output));
}
Commons-io FileUtils を使用してテキストファイルを簡単に比較し、JUnitの TemporaryFolder を使用して、テストの実行前に出力ファイルが存在しないようにします。
使用する - junitx.framework.FileAssert
junit-addonsプロジェクト からのクラス。その他のリンク:
方法の1つ:
assertEquals(Java.lang.String message,
Java.io.Reader expected,
Java.io.Reader actual)
メソッドがファイルを書き込んだ後、単体テストでファイルを読み取り、正しく書き込まれているかどうかを確認できます。
もう1つの意味があるのは、メソッドを1つに分割して、そのデータを取得し、ファイルに書き込むだけのメソッドに返すことです。次に、最初のメソッドによって返されたデータに問題がないかどうかを確認できます。
そして、もう1つのもっともらしいアプローチは、データを書き込むメソッドにOutputStream
を渡すことです。 「実際のコード」では、FileOutputStream
/FileWriter
を渡すことができますが、テストコードでは、OutputStream
のモック実装を記述して、何が書き込まれているかを確認できます。それ。
出力をストリームに入れるようにメソッドを制御できない場合は、メソッドがパラメーター(またはそのクラスのコンストラクター)でストリームを受け取るように、コードをリファクタリングする必要があると思います。
その後、テストは非常に簡単です。ストリームを確認するだけです。簡単にテストできるコードは、通常、優れたコードと同じです。
あなたの質問は単純に見えるかもしれませんが、それはユニットテストの核心にぶつかりますが、テスト可能な整形式のコードを書く必要があります。これが、一部の専門家が、最初に単体テストを作成し、次に実装クラスを作成するようにアドバイスする理由です。
あなたの場合、あなたのメソッドが期待されるファイルを実行して作成することを許可することをお勧めします。その後、ユニットテストでファイルが正しく形成されていることを分析できます。