メソッドがデータベースへの呼び出しを正常に行うことを簡単にテストできます。モッキングは、発生すると予想される呼び出しが実際に発生することに焦点を当てる傾向があります。
のテストが同じ値で呼び出されることを期待していると主張するdb
ように、テストバージョンに置き換える必要があります。UpdateValue
db.Update(value)
ストアド プロシージャまたは SQL のテストを実行する必要があります (最終的には、C# コードと同じエラーの可能性があります) が、コードの単体テストとは別に実行される可能性があります。ストアド プロシージャ ロジックをテストするための別のテスト プロジェクトがあります。これには物理的なデータベースが含まれるため、分離されて最小限に保たれますが、それでも不可欠であると考えています。ほぼすべてのデータベース スクリプトをテストする段階に到達しましたが、最初は基本的な CRUD コードをテストしなくても問題ありません。条件付きステートメントを備えた SQL はすべてテストされます。
コードを使用してデータベースに保存し、値を再度取得できるかどうかを確認するためにエンド ツー エンド テストを実行する場合、これは定義上、単体テストではありません。@lazyberezovskyが述べているように、これは統合テストです。単体テストは、その単体をテストするために、コードの単体に関するすべての依存関係を削除することを目的としています。
そうは言っても、(私の意見では) 統合テストも行うことが不可欠です。ユーザーがユースケースアクションとしてサインオフしたものをテストするなど、ユースケースに対してそれらを持っています。これは一度に多くのコードを叩きますが、共有状態/副作用コードに苦労するという明確な欠点があります。統合テストでは、テストの大部分がコードのアサーションではなく準備であることがわかります。また、失敗した特定のコードを識別していないこともわかっているため、統合テストの失敗を診断することはより困難です。
統合テストで妥協点を見つけます。私たちのデータベースは DAL インターフェイスを介して供給されます。物理データベースとは対照的に、インメモリ テスト データを提供するために、このインターフェイスをスタブ化するだけです (モッキングとは異なります)。これの 1 つの欠点は、適切なデータベースに対する統合テストを見逃していることです。