2012-01-08 17 views
1

私は、プロジェクトが大きくなりつつあり、このプロジェクトで別の人が私を助けようとしているので、私たちはフォーマルユニットテストを導入し始めています。だから私は彼がしていることがすべてを壊さないこと、そしてその逆を確実にする必要があります。単体テストビジネスロジックレイヤー

私はCIサーバーも紹介したいと思いますが、これは他の質問のトピックになります。今質問があります:私は現在、 "The Art Of Unit Testing"(これは推奨される傑作です)を読んでいます。著者が強調しているのは、Unit TestingとIntegration Testingが異なることです。それは私には明らかです。ビジネスロジックのテストは、データベースの接続などに依存しないようにしてください。まず第一に、私は正しいのですか?

私は正しいと思っています(つまり、BLLをユニットテストすると、データベースをスタブする必要があります)、どうすればできますか?私はdb mockingのためのフレームワークがあることを読んだ。これらのうちの1つを使うべきですか?あなたはどちらを使いますか?

次の質問:これが正しい方法だと本当に思いますか?つまり、私のプロジェクトでは、BLはEntity Frameworkを介してデータベースとインタフェースします。したがって、たとえば、私のBLLのメソッド "UpdateItem"が呼び出されると、何かをしてからObjectContextを保存します。このObjectContextは、BLで削除する必要があるEntity Frameworkの依存関係です。しかし、私はそのような方法で何をテストすべきですか?一緒にDALをテストせずにBLレイヤーをテストするユニットは本当に理解できません...私にいくつかの例を教えていただけますか?

ありがとうございました!データベースをスタブマルコ

答えて

0

は、私はそれだけの価値があるとは思わないという、巨大な作業です。私は単体テストに適した慎重に準備されたデータを持つ特別なデータベースコピーを持つことを好む。

テストは、テストの最後にロールバックされるトランザクション内で実行できます。このようにして、ユニットテストデータベースはテストによって変更されず、常に既知の状態に保たれます。

私はブログでUsing Transactions for Unit Testsに書いています。 linq-to-SQLのサンプルコードがありますが、同じアプローチがエンティティフレームワークでも機能します。

+0

こんにちはアンドレス!それは私が言っていることです...私は開発DBと直接対話するテストを書き始めましたが、すべて正しいと思われましたが、この本を読んで私はこれが正しいことではないことを信じ始めました。私のように? – Marconline

4

はい、

ビジネスロジックユニットテストは、あなたがそれについて正しいデータベース

に依存することは避けるべきです。

私はあなたのことをお勧めします:

    • 代わりに、実際のDB呼び出しのスタブを使用して、ビジネスレイヤのためのユニットテストのスイートを使用しています。あなたはDBコンポーネントを抽象化していれば、あなたに最も適したもの(あなたは偽のクラスや模造ライブラリを所有しています)でDBをスタブすることができます。
    • 統合スイートを使用し、実際のDBの呼び出しをテストするテスト

    ユニットテストと統合テストの主な違いは、(だけのことを!): *ユニットテストは高速で、いずれかを必要としません構成 *統合テストが遅く、適切な構成が必要な場合があります(データベースを設定し、適切な接続文字列を指定する必要があります)。

    コードを変更する際にビジネスユニットテストを非常に頻繁に実行できるので、これは良い考えだと思います。非常に速いフィードバック(通常は1〜2秒以内)が得られたため、変更が何も壊れていないので、これは重要です。

    しばらくして、統合テストを実行すると時間がかかりますが、DBが正常に動作することを検証できます。

    また、あなたが言及した本を読むことをお勧めします。このトピックに関する情報の非常に重要な情報源だと考えています。

  • +0

    こんにちは!御時間ありがとうございます。それは私がすると思いますが、私は確認を求めています。私は20のテストメソッドのようなものを書いており、テストケース全体を実行するには少なくとも10〜15秒かかります。私はそれが多すぎると思いますが、EntityFrameworkモデルを効果的に模倣する方法を本当に理解できません。何かを発見するだろう。ところで、私は本を読んでいるので、私は疑問を持ち始めたのです! – Marconline

    +0

    私はEntity Frameworkを使用していませんが、_Repository Pattern_を見て、「Entity Framework Repository」を検索することができます。代わりに、抽象化の背後にあるDBに対話するコンポーネントをラップするだけで、偽の実装を挿入するために_seam_として使用することもできます。 – GolfWolf