2017-04-08 2 views
1

私は自分のJavaプログラムの単体テストを書いています。私のプログラムは、ユーザーが入力したファイルから読み込み、入力されたファイルの内容に基づいて新しいファイルを作成することを含む多くのことを行います。単位テストでpremadeファイルを使用するのは適切ですか?

現在、私の単体テストは、リソースのソースディレクトリに配置したテスト用に作成されたプレマイドファイルを使用しています。ファイルを作成すると、そのファイルは同じリソースソースディレクトリに置かれます。

私はここでたくさんの質問と回答を見てきました。単体テストでファイルを処理する方法については、さまざまな意見があります。これらのプレマードファイルをユニットテスト内で使用するのが適切ですか、それともより良いソリューションがありますか?

+3

はい、完全に問題ありません。しかし、あなたのテストで生成されたファイルをsrcの下に置かないでください。彼らはソースではないので、srcには何もしません。 –

+0

@JBNizetありがとうございます。彼らがどこに生まれ変わりますか? – ST3

+0

また、コードをリファクタリングして、 'FileInputStream'の代わりに' InputStream'だけを受け取り、 'ByteArrayInputStream'を渡してすべてをテストのままにすることもできます。 (ファイルを書くのと同じことです: 'OutputStream'などを使用してください)ファイル名を渡すと、少しリファクタリングされますが、アイデアは同じです。 – Robert

答えて

1

はい、テストするための静的入力ファイルをsrc/test/resourcesディレクトリに配置します。メインコードが出力を生成する場合は、テスト中に配置する最もきれいな場所は、プラットフォーム固有のtmpディレクトリにあります。 Javaでは、これはシステムプロパティjava.io.tmpdirの下にある:

System.out.println(System.getProperty("java.io.tmpdir"));

あなたは、このディレクトリを使用する場合は、MacOSの、Linux、またはWindowsの下でそれを実行している開発者の間で移植されます - だけでなく、任意のビルドサーバー。

また、テストが完了したら、これらの一時ファイルを削除し、前回のテスト実行時に存在する可能性のある一時ファイルについてはテストしないことをお勧めします。

+0

一時ファイルについては、JUnitの 'TemporaryFolder'ルールも見てください。 – JayK

0

静的な "premade"ファイルが適切かどうかは、テストしようとしているロジックとテストデータの管理方法によって大きく異なります。おそらく、今日の日付との相対的な日付を含むテストデータが必要になるでしょう。この場合、静的ファイルを使用すると、相対日付を計算するためのコードを記述するよりも大きな問題になる可能性があります。

JB Nizetは彼のコメントで指摘したように、ソースコードの横にテストデータを格納することは一般的には良い考えではありません。あなたがmavenとそのstandard directory layoutに精通しているかどうかはわかりませんが、それを見て、テストとソースファイルを分離した状態に保つのにどのように役立つかを見てください。

+0

今日の日付のようなファイルが必要な可能性がある点私は現在、私のプログラムにはそういうものはありませんが、心に留めておくのは良いことです。 – ST3

関連する問題