3

サービス層をテストするための単体テストを作成しようとしていますが、これはうまくいっています。サービス層はリポジトリへの依存関係としてあり、RhinoMocks を使用してリポジトリをモックしているので、サービス層を「WITHOUT」でテストしています。素晴らしいデータベースです。

ここで、リポジトリ レイヤーをテストする必要があります。これはデータベースに直接接続されているため、テストする必要がありますね。テストする以外に選択肢はありませんか?

データベースにヒットしないリポジトリの別の実装をテストする場合、これは私の実装をテストしていません。

実行に時間がかかるコードに依存するものはすべて、すべての下位レイヤーをモックアウトすることができました。リポジトリ、それから私はこれを嘲笑しました。その結果、リポジトリの下のレイヤーに対するすべてのテストが高速に完了し、データベースにヒットしません。

問題は、リポジトリをどうするかです。テストする必要がありますが、SQL データベースに依存しています。

4

3 に答える 3

7

さて、一般的な答えは次のようになります。リポジトリ層のロジックを検証する単体テストを作成し、新しいクラスで sql の依存関係を分析し、リポジトリのテストでそれをモックします。私の意見では、リポジトリレイヤーにSQL接続のみが含まれ、ロジックが含まれていない場合、単体テストを行う必要はありません。次に、接続されたデータベースとの統合テストにより適しています。

于 2012-12-29T13:29:35.820 に答える
1

データベースと対話せずに、リポジトリ レイヤーを確実にテストできます。ほとんどの ADO.net クラスは、作成方法に注意を払い、concretion ではなくインターフェイスに結合するように注意すれば、モック可能です。残念ながら、ADO.net が作成されたのは、モッキングが非常に一般的な方法になる前でした。

私の頭の中の本当の問題は、あなたがそれらを嘲笑しようとするべきかどうかです. モッキングの利点は 2 つあります。高速に実行されることと、データベースに関する詳細をカプセル化する必要があることです (必要に応じて、db テクノロジを簡単に切り替えることができます)。機能テストの利点は、データベース レイヤー (ストアド プロシージャなど) もテストすることであり、間違いなく記述が容易であり、db の変更が行われた場合に統合テストが自動的に通知するという意味で保守が容易になります。モックアウトされたテストを探しているあなたの。

「最良の」アプローチは、moq と実際のデータベースの両方でテストすることです。これにより、両方の長所が得られるからです。ただし、当然のことながらかなりの費用がかかります。

于 2012-12-29T14:53:28.977 に答える
1

したがって、所有していないコードをモックすることは悪い習慣です。受け入れ/統合テストを介してリポジトリをテストするのが最善の方法だと思います

于 2012-12-29T13:23:58.460 に答える