外部ファイルから単体テストのデータをロードするかどうか


16

ユニットテストを行うとき、どのくらいの量のデータをフィードし、テスト対象のユニットから戻ってくるのかを議論することがよくあるので、実際のテストファイルに含める必要があります。

私が常に苦労しているトレードオフは:

  • テストの大部分(コードボリューム内)が入力データと出力データで構成されている場合、実際にテストを読み取ることは困難に思えますが、実際の入出力を簡単に確認できます。
  • ファイルからテストデータを読み込むと、可能なデータ入力のバリエーションを簡単にテストでき、テストデータを複数のテストに簡単に再利用できますが、入力が正確に何であるかを確認するには、ソースコードを残しておく必要があります。

これらのいずれかがアンチパターンですか?


どのタイプのデータですか?
ジョンリード

@JonReid:ほとんどのテキスト。
DudeOnRock

回答:


10

あなたの質問に直接答えるために-いいえ、正しく使用された場合、どちらもアンチパターンではないと思います。

---より詳細な回答---

私の経験から、これはテストの目標に大きく依存すると思います。これは私が過去に使用した経験則であり、それは私が決定するのに役立ちました:

実際に小さなコード単位をテストしていますか?(真の単体テスト)

yesの場合、私が見つけた、それは私が渡されているものを見ることができるので、正確にテスト自体の内部データを作成するためにはるかに簡単です。これらのケースでは、私は通常を探しますジャスミン、私がいることを見つけるために使用するライブラリー様テストデータの作成と保守が簡単になります。しかし、それは個人的な好みです-あなたの仕事を簡単にするものを使用してください。

いいえの場合、おそらくシステム自体を実際にテストしています。これらの場合、外部ソースからデータをロードすることがよくありますが、その理由は次のとおりです。

  1. このテストは、プログラマーのコードの明快さに関するものではありません(それはまだ重要です-誰かがこれを維持する必要があります)が、システムのチャンク全体で十分に異なるタイプのデータを実行して、それが適切に機能することを確認することです。
  2. 多くの場合、テストデータを読み込んで使用する配管コードを記述しますが、データ自体は他の誰か(通常、私の場合はQAスタッフ)によって作成されます。これらの人々は通常プログラマーではないので、コードを編集しているとは期待できません。

長い答えは短く、テストする対象とその理由に依存します。両方のアプローチは有用であり、その場所があります-あなたの状況に最適なものを選択してください。


9

ここにはトレードオフはありません。ソースコードは、大量のデータではなく、アルゴリズム、または少なくともビジネスロジックを記述することになっています。フーリエ変換を記述する場合、洞調子が単一のピークに正しくマッピングされていること、混合音がより多くのピークにマッピングされていることなどを検証する必要がありますが、そのためにはsinus.wav、ルーチンに名前を付けたファイルをフィードして、出力構造は期待どおりです。

確かに、技術的にあなたがいることがすぐに保証はありませんsinus.wav、本当に洞トーンを含んでいますが、しかし、あなたが言ったようにいずれかのことを、ソース10万の振幅値を一覧表示することは本当にあなたを与えるものではありません-実際には、それが悪化し、あなたのために少なくとも、オーディオプレーヤーで外部ファイルを再生して確認できますが、ソースコードに埋め込まれたデータ値は、基本的には何もできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.