Я следую статье - http://www.asp.net/web-api/overview/testing-and-debugging/mocking-entity-framework-when-unit-testing-aspnet-web-api-2 — для модульного тестирования контроллера Web API 2.
Там автор тестирует метод put, как показано ниже:
//....
Product GetDemoProduct()
{
return new Product() { Id = 3, Name = "Demo name", Price = 5 };
}
[TestMethod]
public void PutProduct_ShouldReturnStatusCode()
{
var controller = new ProductController(new TestStoreAppContext());
//** Edited myself from original:
//** var item = GetDemoProduct();
var updatedItem = new Product(){ Id = 3, Name = "Demo name", Price = 6 };
var result = controller.PutProduct(3, updatedItem) as StatusCodeResult;
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(StatusCodeResult));
Assert.AreEqual(HttpStatusCode.NoContent, result.StatusCode);
//** Added a new assertion.
Assert.AreEqual(updatedItem.Price, GetDemoProduct().Price);
}
Какие тесты помещают метод в контроллер
public IHttpActionResult PutProduct(int id, Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != product.Id)
{
return BadRequest();
}
//db.Entry(product).State = EntityState.Modified;
db.MarkAsModified(product);
try
{
db.SaveChanges();
}
//....
return StatusCode(HttpStatusCode.NoContent);
}
Чтобы убедиться, что обновление действительно происходит, я добавил несколько строк в исходный метод тестирования, которые обозначены ** в блоке.
Ну, фиктивный элемент данных в конце концов не обновляется. Цена остается такой же, как цена продукта до обновления.
Почему db.SaveChanges(); не работает?
var updatedItem = new item(){ Id =
у вас есть класс где-то под названиемitem
? - person AaronLS   schedule 16.08.2014