テストについて質問があります。
異常を返すクラスがあります。このクラスには、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つであるか、別の解決策であるかはわかりません。手伝って頂けますか?
ありがとうルカ