コントローラーにこのようなアクションメソッドがあります
public ActionResult Index()
{
using (NorthwindDataContext db = new NorthwindDatacontext())
{
var results = db.GetRecordSets(arg1, ....).ToList();
// use results as list
}
return View();
}
そして、私はそのテストの作成を開始したかった (はい、ビルド前ではなくビルド後... しかし、コードは私が TDD を使い始める前に書かれていたので...)
そして、このようなプロパティをコントローラーに追加することがわかりました
public delegate NorthwindDatacontext ContextBuilderDelegate();
public ContextBuilderDelegate ContextBuilder { get; set; }
コンストラクターに次のようなものを追加できます...
ContextBuilder = () => new NorthwindDatacontext();
次に、NorthwindDatacontext のモックを使用して ContextBuilder プロパティを設定する ActionMethod をテストできます。
var controller = new MyController();
var mockDataContext = new Mock<NorthwindDatacontext>();
controller.ContextBuilder = () => mockDataContext.Object;
しかし... NorthwindDatacontext のすべてのメソッドが returnType として ISingleResult を使用し、そのインターフェイスでオブジェクトを作成する方法が見つからないため、これを使用する方法が見つかりませんでした。私はこれを試しました
var theResult = new List<GetRecordSetsResult>();
// fill the data structure here with the provided result...
mockDataContext.Setup(c => c. GetRecordSets()).Returns(theResult as
ISingleResult<GetRecordSetsResult>);
ただし、ISingleResult に変換すると theResult が null になるため、機能しません。
この方法でテストするために ISingleResult オブジェクトを作成する方法はありますか、またはここで間違った方法を実行していますか?
前もって感謝します