Загрузка связанных объектов в Mocked DbContext с использованием Moq для тестов контроллера Web Api 2
Я пытаюсь провести модульное тестирование некоторых контроллеров Web Api 2, которые используют Entity Framework 6, но возникают проблемы с загрузкой связанных объектов после добавления объекта. Я использую Moq для создания поддельных DbContext и DbSet, и добавил
public virtual void MarkAsModified<T>(T item) where T : class
{
Entry(item).State = EntityState.Modified;
}
обойти_db.Entry(foo).State = EntityState.Modified;
вопрос о действии пут.
Действие Api - это Пост в этом упрощенном примере, где нам нужно вернуть 2 связанных объекта (Bar и Qux).
[ResponseType(typeof (Foo))]
public async Task<IHttpActionResult> PostFoo(Foo foo)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
//Do other stuff
_db.Foos.Add(foo);
_db.Entry(foo).Reference(x => x.Bar).Load();
_db.Entry(foo).Reference(x => x.Qux).Load();
await _db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new {id = foo.Id},foo);
}
И тогда будет упрощенный тест
[TestMethod]
public async Task PostFoo()
{
var model = new Foo
{
Name="New Foo",
QuxId = 99,
Qux = null,
BarId = 66,
Bar = null
};
var result = await _controller.PostFoo(model) as CreatedAtRouteNegotiatedContentResult<Foo>;
Assert.IsNotNull(result);
Assert.IsNotNull(result.Qux);
Assert.IsNotNull(result.Bar);
}
Есть ли более дружественный способ сделать_db.Entry(foo).Reference(x => x.Bar).Load();