0

テストについて質問があります。

異常を返すクラスがあります。このクラスには、2つの異なるタイプの異常を返す2つの異なるメソッドと、(両方のタイプの)すべての異常を返す1つのメソッドがあります。

これはサンプルコードです:

 public interface IAnomalyService
{
    IList<Anomaly> GetAllAnomalies(object parameter1, object parameter2);
    IList<Anomaly> GetAnomalies_OfTypeA(object parameter1);
    IList<Anomaly> GetAnomalies_OfTypeB(object parameter2);
}
public class AnomalyService : IAnomalyService
{
    public IList<Anomaly> GetAllAnomalies(object parameter1, object parameter2)
    {
        var lstAll = new List<Anomaly>();
        lstAll.AddRange(GetAnomalies_OfTypeA(parameter1));
        lstAll.AddRange(GetAnomalies_OfTypeB(parameter2));
        return lstAll;
    }
    public IList<Anomaly> GetAnomalies_OfTypeA(object parameter1)
    {
        //some elaborations
        return new List<Anomaly> { new Anomaly { Id = 1 } };
    }
    public IList<Anomaly> GetAnomalies_OfTypeB(object parameter2)
    {
        //some elaborations
        return new List<Anomaly> { new Anomaly { Id = 2 } };
    }
}

class Anomaly
{
    public int Id { get; set; }
}

タイプAとタイプBの異常を取得する2つのメソッド(GetAnomalies_OfTypeAとGetAnomalies_OfTypeB)のテストを作成しました。GetAllAnomalies関数をテストしたいのですが、何をしなければならないのかわかりません。

1)クラスAnomalyServiceのGetAnomalies_OfTypeAとGetAnomalies_OfTypeBを仮想として宣言し、クラスAnomalyServiceのモックを作成し、Moqを使用してCallBaseをtrueに設定し、GetAnomalies_OfTypeAとGetAnomalies_OfTypeBの2つのメソッドをモックできます。

2)メソッドGetAllAnomaliesをAllAnomalyService(インターフェイスIAllAnomalyServiceを使用)と呼ばれる別のクラスに移動し、そのコンストラクターでIAnomalyServiceのインターフェイスを渡し、GetAllAnomaliesをテストしてIAnomalyServiceインターフェイスをモックします。

私はユニットテストに慣れていないので、どちらの解決策が鉱山の1つであるか、別の解決策であるかはわかりません。手伝って頂けますか?

ありがとうルカ

4

1 に答える 1

0

クラスがテストに抵抗する場合、モッキングは優れたツールです。ソースがあれば、多くの場合、モックは必要ありません。このアプローチを試してください:

  • AnomalyServiceさまざまな定義済みの異常 (タイプ A のみ、タイプ B のみ、両方、なし、タイプ C のみ、...)を返すことができるファクトリを作成します。
  • 3 つのタイプは何らかの形で関連しているため、各テストで 3 つすべてをチェックする必要があります。タイプ A の異常のみが予想される場合はGetAllAnomalies、 が と同じ結果をGetAnomalies_OfTypeA返しGetAnomalies_OfTypeB、空のリストを返すことを確認する必要があります。
于 2012-08-03T09:28:21.753 に答える