ポイント2で「ソリューションごとのビンフォルダ」を意味する場合は、私はあなたのポイントを見ることができます。個人的には、各テストプロジェクトにリファレンスを追加するだけです。一方、あなたが本当に意味するのは(1b)「あなたのテストをあなたのコードと同じアセンブリに入れないでください」私は彼に心から同意し、あなたに同意しません。コードの明快さと組織を強化するために、テストはプロダクションコードとは異なるものにする必要があります。テストクラスを分けておくことで、次のプログラマーがより簡単に理解できるようになります。テストで内部にアクセスする必要があり、内部メソッドがアセンブリに対して「パブリック」なので、Assembly.csファイルでInternalsVisibleTo構造を使用できます。
私は、コードのパブリックインターフェイスだけを単体テストするだけで十分です。適切に(TDDを使用して)、あなたのコードのプライベートメソッドは、単に以前のパブリックコードのリファクタリングとなり、パブリックメソッドを通じて十分なテストカバレッジを持ちます。もちろん、これは法律ではなくガイドラインなので、プライベートメソッドをテストしたいときがあります。そのような場合、アクセサーを作成し、リフレクションを使用してプライベートメソッドを呼び出すことができます。
私が行うもう1つの推奨は、ユニットテストとコードカバレッジを並行して使用することです。コードカバレッジは、より多くのテストが必要なときを識別するのに役立つヒューリスティックです。カバレッジの欠如は、より多くのテストが必要な場所を示すためのガイドとして使用する必要があります。これはあなたが100%カバレッジを必要としていると言うわけではありません - 一部のコードは単体テスト(自動プロパティなど)を保証しないほど単純であり、既存のテストでは触れられないことがあります。
私が記事で持っていたいくつかの問題がありました。おそらく最大のものは、単体テストのためのデータベースからの抽象化の欠如です。たぶんdbに対して踏み込む必要のある統合テストがあるかもしれません。おそらく、トリガーや制約の機能性をテストするときは、そうでなければその正確性を確信できません。しかし、一般的には、データアクセスをインターフェイスとして実装し、単体テストの実際の実装を模擬して、実際にデータベースに接続する必要はないと考えています。私のテストはより速く実行されることがわかります。したがって、私がこれを行うとき、テストをより頻繁に実行します。 "偽の"データベースインターフェイスを構築するには少し時間がかかるかもしれませんが、データアクセスに同じデザインパターンを守っている限り、再利用できます。
最後に、nUnitを使用しているかどうかにかかわらず、非常に便利なプラグインであるTestDriven.NetでnUnitを使用することをお勧めします。右クリックのコンテキストメニューでテストを実行またはデバッグするのに非常に便利です。
そのリンクは404です。http://misko.hevery.com/code-reviewers-guide/を意味しましたか? – Andrew
はい、リンクを修正しました。 –