IHttpActionResult и тестирование интеграции веб-API v2 положить в MS Test
VS2013 автоматически сгенерировал контроллер Web api v2 для меня на основе моего контекста EF. Я пытаюсь модульно протестировать положенную часть контроллера. Независимо от того, что я делаю, я не могу заставить свои утверждения проверить возврат StatusCodeResult. Автоматически сгенерированный код выглядит следующим образом:
// PUT api/Vendor/5
public IHttpActionResult PutVendor(int id, Vendor vendor)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != vendor.Id)
{
return BadRequest();
}
db.Entry(vendor).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!VendorExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return StatusCode(HttpStatusCode.NoContent);
}
мой интеграционный тест выглядит так:
[TestMethod]
public void PutVendor_UpdateVendorRecord_ReturnsTrue()
{
// Arrange
//CleanUpVendors();
var controller = new VendorController(ctx);
const string vendorName = "Unit Test Company";
// Add vendor to database
ctx.Vendors.Add(new Vendor { Active = true, Name = vendorName });
ctx.SaveChanges();
var myVendor = (from v in ctx.Vendors
where v.Name == vendorName
select v).FirstOrDefault();
// Get Newly Inserted ID
Assert.IsNotNull(myVendor, "Vendor is Null");
myVendor.Name = "New Name";
// Act
var httpActionResult = controller.PutVendor(myVendor.Id, myVendor);
//var response = httpActionResult as OkNegotiatedContentResult<Vendor>;
var response = httpActionResult as OkNegotiatedContentResult<Vendor>;
// Assert
}
что-то не так с моим тестом? Как должны выглядеть мои утверждения?
Это утверждение возвращает правда:
Assert.IsInstanceOfType(httpActionResult, typeof(System.Web.Http.Results.StatusCodeResult));
но я не думаю, что это на самом деле тестирование ничего, кроме того, что был какой-то возврат. Любая помощь будет очень признательна.
1 ответов
учитывая ваш комментарий об изменении базы данных в памяти, которое вы планируете, ниже приведены некоторые примеры того, как вы могли бы написать тесты в своем сценарии:
PeopleController people = new PeopleController();
// mismatched person Id returns BadRequest
Person person = new Person();
person.Id = 11;
person.Name = "John updated";
IHttpActionResult result = people.PutPerson(10, person).Result;
Assert.IsInstanceOfType(result, typeof(BadRequestResult));
// ---------------------------------------------------
// non-existing person
Person person = new Person();
person.Id = 1000;
person.Name = "John updated";
IHttpActionResult result = people.PutPerson(1000, person).Result;
Assert.IsInstanceOfType(result, typeof(NotFoundResult));
// --------------------------------------------------------
//successful update of person information and its verification
Person person = new Person();
person.Id = 10;
person.Name = "John updated";
IHttpActionResult result = people.PutPerson(10, person).Result;
StatusCodeResult statusCodeResult = result as StatusCodeResult;
Assert.IsNotNull(statusCodeResult);
Assert.AreEqual<HttpStatusCode>(HttpStatusCode.NoContent, statusCodeResult.StatusCode);
//retrieve the person to see if the update happened successfully
IHttpActionResult getPersonResult = people.GetPerson(10).Result;
OkNegotiatedContentResult<Person> negotiatedResult = getPersonResult as OkNegotiatedContentResult<Person>;
Assert.IsNotNull(negotiatedResult);
Assert.AreEqual<string>(person.Name, negotiatedResult.Content.Name);