我的控制器中有这样的操作方法
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 的所有方法都使用 ISingleResult 作为 returnType 并且我找不到使用该接口创建对象的方法。我试过这个
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 为空。
有没有办法创建一个 ISingleResult 对象来测试这种方式,或者我在这里做的事情不正确?
提前致谢