0

私はユニットテストにかなり慣れていません。UI -> BLL -> DAL の 3 層アーキテクチャで構築されたサイトがあります。また、asp.net プロバイダー モデルを使用したので、web.config を変更することで、DAL dll に切り替えてさまざまなデータ ソースをターゲットにすることができます。DAL は Entity Framework で作成されます。

さて、私の質問は、BLL を単体テストするにはどうすればよいですか? NUnitを使用しています。

私のサイトを実行/デバッグする場合、asp.net/IIS はすべてをロードし、web.config から正しい構成を取得します。これは、エントリ ポイントが IIS からのものであるためです。ここで、NUnit gui を使用してテストし、BLL に対するテスト ケースを含むテスト プロジェクト "MySite.Test.dll" があるとします。テスト フレームワークは、すべてのテストを正常に実行するための正しい構成をどのように取得しますか。正しいプロバイダーをロードするには、web.config の情報が必要です。

現在、私の DAL には、EntityFramework によって作成された App.config があり、その中には connectionString だけがあります。この app.config にすべてのプロバイダー関連の構成を配置する必要がありますか? または、これを正しく行う方法の全体像が欠けていますか?

これは、人々が常に行う必要があると私が想像する一般的なことです。ライブラリを単体テストする方法について、誰かが詳細を教えてください。

ありがとう、レイ。


編集: 最初の 2 つの回答を読んだ後、統合テストで説明を修正する必要があると思います。基本的に、IIS をエントリ ポイントとして使用する代わりに、NUnit などの GUI ツールを使用してコードを実行およびテストします。つまり、NUnit -> BLL -> DAL です。人々は実際にどのようにそれを設定しますか?

ありがとう、レイ。

4

3 に答える 3

1

単体テストプロジェクトの「web.config」ファイルの代わりに、テスト用の正しい構成を入力できる「MySite.Test.dll.config」ファイルが必要になります。この方法を使用すると、必要に応じて、代わりに別のプロバイダーを使用してインメモリデータベースに接続できることに注意してください。

于 2009-04-15T11:22:00.560 に答える
1

あなたがやろうとしているように見えます-統合テストです...ユニットテストは、定義上、プレーンオールド.Netクラスを分離してテストします。データベースも構成もありません...そのため、適切な単体テストを行うには、BLLをサービスレイヤーとドメインロジッククラスにリファクタリングする必要があります。これらは個別にテストします。同様に: サービス レイヤーはドメイン ロジック クラスを使用し、単体テストはそれらを使用します。したがって、ドメイン クラスはデータベースに移動せず、接続文字列などは必要ありません。

ただし、データベースとの適切な統合テストを行いたい場合は、それも行う必要があります。これが必要な場合-グーグルで検索してください。nunit.configなどでいくつかの構成文字列を取得することは難しくありません...詳細はわかりません。

ただし、あなたがやりたいのは単体テストであり、統合テストではないと思います..

正確に何をテストしたいのか自問してください。単体テストは「すべて」をテストするわけではありません。リファクタリングし、依存関係を逆転させ、ビジネス ロジックを分離してテストしてみてください。

于 2008-11-19T00:48:49.567 に答える
0

DALからどれだけ孤立したいかに応じて、いくつかの異なるオプションがあります。テストにDALを含める場合は、app.configファイルの接続文字列セクションを単体テストプロジェクトのapp.configファイルにコピーできます。ただし、@ badbadboyが言うように、これは実際には統合テストであり、単体テストではありません。

適切な単体テストを実行する場合は、依存性注入とインターフェイスを使用して、BLLからDALをモックアウトできるようにする必要があります。私はLINQ-to-SQLを使用しているので、DataContextの周りにインターフェイスとラッパークラスを作成します。これにより、単体テストに使用するモックデータベースを作成して、エンティティクラスを個別にテストできます。

エンティティクラスを個別にテストすると、テストの脆弱性が低下し、各テストのデータを個別に設定できるようになります。これにより、保守がはるかに簡単になります。

また、モックオブジェクトを生成するのがほとんど簡単になるモックフレームワークを調べることもできます。Rhino Mocksでかなりの成功を収めましたが、他にもあります。

于 2008-11-19T01:02:00.523 に答える