単体テストはリポジトリに保存する必要がありますか?


50

私は成長中のプログラマーで、GitHubに保存しているライブラリの単体テストを最終的に実践しています。

レポジトリにテストスイートを含めることができたのですが、他のプロジェクトを見てみると、テストを含めるのは失敗したように思えます。

これは悪い形と見なされますか?ユーザーは作業コードにのみ興味があり、とにかく自分のフレームワークでテストするという考えはありますか?


13
何故なの?テストはプロジェクトと一緒に行う必要があります。そうでない場合、ほとんど役に立ちません。

61
一部のプロジェクトのリポジトリにユニットテストが含まれていないという事実は、そもそもこれらのテストが存在しないためです。
-prasopes

4
それらは別々に構築されますが、それ以外の場合、u-testはコードと密接に結合されます。一貫性を確保するには、何らかの依存関係管理が必要です。それはなど、テスト・リポジトリへの「リンク」を制御し、同じリポジトリ、subrepositoryまたはmaintaingバージョンにそれらを置くこと
MAR

2
@stoupaは間違いなく正しいです。どこかでテストの素晴らしいキャッシュが隠されているという最高のものを想定するのは素晴らしいことですが、現実の世界ではプログラマーは怠け者です。
カスカベル

2
ビルドスクリプトでテストクラスのコンパイルを無効にすることをお勧めします。
user606723

回答:


119

必ずテストをリポジトリに配置する必要があります。私の意見では、テストはコードの一部であり、他の人がそれを理解するのに非常に役立ちます(うまく書かれていれば)また、コードベースを変更したり、コードベースに貢献したりするときに他の人を助けることができます。良いテストは、あなたの変更が不注意で何かを壊さないという自信を与えます。

ただし、テストコードは製品コードから十分に分離する必要があります。たとえば、Mavenは、生産コードとテストコードを異なるフォルダーに配置することでこれを実現します。「このファイルは本番またはテストコードの一部ですか」という質問は決して発生しないはずです。

私は個人的に、自分のコードで使用済みライブラリの単体テストを書いていません。それらが動作することを期待しています(少なくともリリースバージョンを使用する場合は、バグが明らかに表示される可能性があります)。統合テストである程度のテスト範囲を取得できますが、それだけでは不十分です。


1
別の例として、ipythonのテストフォルダーを見てください。誰かがそれをチェックアウトした場合、どこに置いても、テストの相対リンクはまだ真実です。テストするのは簡単です。これは、新しい開発マシンが適切に構成されているかどうかを判断するために重要です。
スペンサーラスブン

テストはコードの一部だけでなく、ドキュメントの一部であり、多くの場合仕様の一部です。テスト(実行および合格)は「生きたドキュメント」です。
マイケルイースター

54

チェックインしたソースコードに単体テストを含めない場合、次のようになります。

  • そのコードの独自のコピーをダウンロードしてビルドする人は、それが意図したとおりに機能していることをどのように検証しますか?コンパイラーとライブラリーのバグはまれであり、データエラー(特にソースコードをコンパイルできないようにしないもの)はさらにまれですが、特にビルド環境を指示できない程度の場合、間違い発生する可能性があります雇用主は、使用するツールを指定できます。
  • ソースコードのローカルコピーに何かが発生した場合、どのようにしてテストを元に戻しますか?
  • 新しい開発者は、自分の変更が既存のコードベースの何も壊さないことをどのように検証しますか?

ボトムラインは、私は考えるでしょうではない非常に悪いことでリポジトリ公式ソースコードで記述された任意のユニットテストを含みます。


7

もちろん、いくつかの理由から、ユニットテストをリポジトリに配置する必要があります。

  • 以前のバージョンに簡単に戻すことができます
  • プロジェクトに取り組んでいる他の人々もユニットテストにアクセスできます
  • 一部の人々は、ユニットテストをドキュメントの一部と考えています(TDDおよびBDD)

6

別のコンピューターで実行する機会がある場合は、必ず含めてください。これらは個別にビルドする必要があるため、ユーザーは追加する必要がなく、余分な依存関係がある可能性がありますが、必ず含める必要があります。

リポジトリにテストを含まないほとんどのプロジェクトには、単に何もないと強く思うでしょう。

テストを個別のモジュールとして使用する理由があるので、古いコードに対して新しいテストを簡単に実行できます。APIで安定したライブラリやコマンドラインを介したブラックボックステストに役立ちます。新しいテストがおそらく古いコードでコンパイルされないようなコンパイルされた言語の有用性は限られています。


5

絶対に。ここでの追加のボーナスポイントは、ソースファイルのバージョンXがテストのバージョンYに対応することを追跡する機能にあります。つまり、以前のバージョンに戻って、そのバージョン用に設計された適切なテストを取得できるようにする必要があります(APIの変更などの場合)。


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