3

コントローラ、ビジネス、データ層の3層アーキテクチャを使用しています。データレイヤーで、接続文字列とその他の必要なパラメーターを渡してSQLServerデータベースを呼び出しています。

ControllerレイヤーとBusinessレイヤーの単体テストを作成する必要があります。ハードコードされた値/結果を返すスタブ(偽のリポジトリ)を作成したいと思います。ビジネスレイヤーのテストを作成する場合、ロジックは実際のデータベースではなくこのスタブを呼び出す必要があります。

これを実現するために、ビジネスレイヤーでコードを作成するにはどうすればよいですか?

ビジネスレイヤー:

public string GetValues(string xmlData)
{
    DataObject do = new DataObject ();
    string result = do.GetValues(xmlData);
    return result;
}

データアクセス:

public static string GetValues(string xmlData)
{
    return SqlHelper.ExecuteScalar(
        ConfigurationManager.AppSettings["ConnectionString"].ToString(),     
        "DBO.usp_GetDetail",
        xmlData
    ).ToString();
}
4

1 に答える 1

2

シナリオをテストするには、コードがテスト可能でなければなりません。SOLIDの原則に従っている場合は、そうである可能性が高くなります。しかし、この種の単体テストを行うために不可欠なものに焦点を当てましょう。

  1. ビジネス層は、具体的なクラスではなく、抽象化 (ほとんどの場合、これはインターフェイスを意味します) に依存する必要があります。このようにして、単体テストで、これらの依存関係のスタブを提供できます。
  2. ビジネス レイヤーの依存関係は、依存関係の挿入 (コンストラクターの挿入など) を介して提供する必要があります。これにより、単体テストでスタブ化されたオブジェクトを簡単に渡すことができます。

同じ原則がコントローラーとビジネスレイヤーの相互作用にも適用されます。これらの 2 つのルール (基本的に SOLID の依存関係反転の原則に絞り込まれます) に固執すると、コードはそうでない場合よりもはるかに単体テストしやすくなります (SOLID の原則に固執することは全体的に良い考えです)。

おそらくモック/スタブを作成することになるので、MoqFakeItEasyなどの既存のモック フレームワークを使用することをお勧めします。

編集- コードが密結合している場合、オプションは次のように制限されます。

  • リファクタリング(これは明らかですが、レガシーシステムでは不可能/努力する価値がないかもしれません)
  • TypeMock Isolator などの有料ツールを使用します。Isolator はコンパイラ API を使用してメソッド呼び出しをインターセプトし、その結果、静的メソッド、プライベート メンバー、およびフリー フレームワークでは許可されないすべてのものへのスタブ/モック呼び出しを実行できます。
  • Microsoft Molesを使用します。Mole は、動的アセンブリ生成を利用して偽の型を生成します。これにより、Isolator のような柔軟性が得られますが、無料です。フレームワークが少し重いことに注意してください(追加のアセンブリ、ファイルなど)。
于 2012-05-17T08:39:19.070 に答える