У меня есть такой метод действия в моем контроллере
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();
тогда я мог бы протестировать ActionMethod, установив свойство ContextBuilder с макетом NorthwindDatacontext
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>);
но это не работает, потому что theResult имеет значение null при преобразовании в ISingleResult.
Есть ли способ создать объект ISingleResult для тестирования таким образом, или я делаю неправильный способ сделать что-то здесь?
Заранее спасибо