2015-10-20 5 views
5

ごく基本的な質問がありましたら申し訳ございません。012 Webサービスのセット(.Net WebApiを使用して開発されています)があります。これらのサービスは、ビジネス層またはデータアクセス層APIです。これらのAPIは、他のサービスまたはデータベース自体に依存しています。他のサービスやデータベースに依存しているサービスの単体テストを書く方法

単体テストケースを作成したいと思います。次の質問があります。

  1. ビジネスレイヤAPIはデータアクセスサービスやその他のサービスに依存しているため、ビジネスAPIを呼び出すためだけに単体テストを書くと、データアクセスAPIが呼び出されます。これは単体テストケースを書く正しい方法ですか?またはすべての依存オブジェクトにユニットテストを注入する必要がありますか?私は以前のものがユニットテストではなく統合テストであると思います。

  2. データアクセス層の単体テストを書くべきでしょうか?私はこのリンク(Writing tests for data access code: Unit tests are waste)をチェックし、DALは単体テストを必要としないと言います。私はまだデータアクセス層のテストを書くべきですか?私はユニットテストではなく、統合テストになると思いますか?

+0

2の場合、ビジネスロジックがDALにどれだけあるかによって異なります。テスト可能なロジックがあれば、単体テストがコードを信頼できるものにするのに役立つのではないかと思われます。 DALが単純なCRUD操作を行っているだけの場合は、UTにとって意味がないと思います。 1の場合、ベストプラクティスでは、すべてのサービスでインターフェイスを実装する必要があります。 UI - >ビジネス - > DALの場合は、IBusinessとIDALがあり、各インターフェースをUTモックや偽物でテスト可能にすることができます。 –

+0

私は人々が「正しい」または「スマート」を鳴らしたいという欲求の中で用語に捉えすぎていると思います。退行を防ぐテストをすることは*良いこと*です。これらのテストがデータベースに触れるかデータベースに触れないかは、実際には大規模なスキームでは問題になりません。テストを行う==良い、テストしない==悪い。純粋な単体テストが必要な場合は、すべての依存関係に偽装された実装を注入する必要があります。私はFakeItEasyが好きですが、あなたがそれを行うのを助ける他のフレームワークがあります。あなたのDALがデータの読み書き以外のロジックを実行する場合は、それをテストする必要があります。 –

答えて

0

質問1:

私はあなたがTDDを行いたい場合は、あなたが言ったように、あなたが統合テストを実行することになるので、それは、「正しい」方法ではないと言うでしょう。それでは、もう一度、おそらくあなた TDDと統合テストはあなたには十分ですが、質問に答えることができます:これは、** unit - **あなたのコードをテストする適切な方法ではありません。


質問は2

私はそれはあなたがあなたのデータアクセス層に持っているもの左右されると言うでしょう。たとえば、リポジトリを実装する場合、おそらくいくつかのテストを書くことになります。

保存方法

あなたはこのエンティティのいくつかのプロパティを編集し、実際に変更を保存し、新しいエンティティを作成しません変更を永続化、リポジトリから取得したエンティティを与えられたことを確認する

。さて、これは統合テストだと思うかもしれませんが、あなたのコードがどれほどうまく設計されているかによって実際は異なります。例えば、あなたのリポジトリは、低レベルのORMの上にロジックの余分な層だけかもしれません。その場合、saveメソッドをテストするときに、リポジトリに挿入されたORMサービスの正しいパラメータを使用して適切なメソッドが呼び出されると主張します。

エラーと例外

データにアクセスしながら、このような破壊されるデータベースへの接続などの問題、または予想されるようにデータの形式ではないこと、または逆シリアル化の問題を有することが可能です。良いエラー処理を提供し、カスタム例外を作成してコンテキストに応じて情報を追加したい場合は、確実にcorrext情報が伝播することを確認するテストを書いてください。

あなたのDALがモックではないORMをラップするいくつかのクラスであり、そこにロジックがない場合、おそらくテストは必要ないかもしれませんが、これも起こりそうにないようです多くの場合、間違いやテストをしたいと思うような論理がほとんどあります。

関連する問題