テストはアプリケーションロジックと同じプロジェクトに含める必要がありますか?
場合によります。どちらの方法でもトレードオフがあります。
1つのプロジェクトに保持するには、プロジェクトを分散するための追加の帯域幅、追加のビルド時間、およびインストールフットプリントが必要になり、テストコードに依存する本番ロジックの間違いを犯しやすくなります。
一方、プロジェクトを個別に保持すると、プライベートメソッド/クラス(プログラミング言語によって異なります)を含むテストを作成するのが難しくなり、新しい開発環境のセットアップ(新しい開発者が参加する場合など)などの管理上の小さな問題が発生します。プロジェクト)難しい。
これらのさまざまなコストがどれほど重要かはプロジェクトによって異なるため、普遍的な答えはありません。
ロジッククラスをミラーリングするためのテストクラスを用意する必要がありますか、それとも必要と思われる数のテストクラスだけを用意する必要がありますか?
いいえ。
十分に因数分解されたテストコード(つまり、最小限の重複、明確な意図など)を可能にするテストクラスが必要です。
テストクラスのロジッククラスを直接ミラーリングすることの明らかな利点は、特定のコードに対応するテストを簡単に見つけることができることです。テストコードの柔軟性を制限せずにこの問題を解決する方法は他にもあります。通常、テストモジュールとクラスの単純な命名規則で十分です。
テストクラス、メソッド、およびプロジェクトにどのように名前を付ける必要がありますか(異なるプロジェクトにある場合)
次のように名前を付ける必要があります。
- 各テストクラスとテストメソッドには明確な目的があり、
- 特定のテスト(または特定のユニットに関するテスト)を探している人が簡単に見つけられるようにします。
プライベートメソッド、保護メソッド、および内部メソッドをテストする必要がありますか、それとも公的にアクセス可能なメソッドだけをテストする必要がありますか?
多くの場合、非公開のメソッドをテストする必要があります。パブリックインターフェイスをテストするだけで十分な自信が得られるかどうか、または本当にテストしたいユニットがパブリックにアクセスできないかどうかによって異なります。
ユニットテストと統合テストを分離する必要がありますか?
これは、テストフレームワークの選択によって異なります。テストフレームワークで最適に機能する方を実行し、次のようにします。
- コードの一部に関連するユニットテストと統合テストはどちらも簡単に見つけることができます。
- 単体テストだけを実行するのは簡単です、
- 統合テストだけを実行するのは簡単です、
- すべてのテストを実行するのは簡単です。
100%のテストカバレッジを持たない正当な理由はありますか?
はい、正当な理由があります。厳密に言えば、「100%のテストカバレッジ」とは、コード内で起こりうるすべての状況が実行され、テストされることを意味します。これは、ほとんどすべてのプロジェクトで達成するのは単純に非現実的です。
単に「100%テストカバレッジ」とは、ソースコードのすべての行がテストスイートによってある時点で実行されることを意味する場合、これは良い目標ですが、厄介な場所に数行しかない場合もあります。自動テストで到達する。機能を定期的に手動で検証するコストが、ゆがみを経て最後の5行に到達するコストよりも少ない場合は、100%の回線カバレッジがないのは十分な理由です。
100%のラインカバレッジが必要であるという単純なルールではなく、開発者にテストのギャップを発見し、「カバーされた」ラインの数が改善されるかどうかにかかわらず、それらのギャップを修正する方法を見つけるように促します。つまり、カバーされたラインを測定すると、ラインカバーが向上しますが、実際に必要なのは品質の向上です。したがって、ラインカバレッジは品質の非常に大まかな概算にすぎないことを忘れないでください。