Тестирование контроллера в asp.net mvc
Я хотел бы проверить правильность представленного DTO. Это голая основа действия контроллера по созданию:
[AcceptVerbs(HttpVerbs.Post)]
public RedirectToRouteResult Create(SomeDTO SomeDTO)
{
SomeObject SomeObject = null;
try
{
SomeObject = this.RepositoryService.getSomeObjectRepository().Create(SomeDTO, this.RepositoryService);
}
catch (BrokenRulesException ex)
{
ex.AddModelStateErrors(ModelState, "Model");
}
catch (Exception e)
{
ModelState.AddModelError("Exception", e.Message);
}
TempData["ViewData"] = ViewData;
TempData["SomeDTO "] = SomeDTO;
return ModelState.IsValid ? RedirectToAction("SomeObjectDetail", new { Id = SomeObject.Id }) : RedirectToAction("Form");
}
Механика, хотя и не уместна, такова: у меня есть строго типизированная форма view =, которая отправляет dto для этого действия, которое возвращает либо форму, либо страницу сведений о созданном объекте.
Я хотел бы провести модульное тестирование на предмет наличия в модели определенных комбинаций ключ / errorMessage с некоторыми неверными значениями dto. Кто-то делал подобные вещи? Любые указатели будут очень цениться.
Благодарю.
С наилучшими пожеланиями,
Кристиан
1 ответ
В вашем случае, я не думаю, что вы действительно хотите проверить состояние модели. Скорее, вы должны просто использовать тестовый набор, чтобы вызвать правильное / неправильное состояние модели, а затем проверить, что соответствующий результат возвращается при определенных условиях. Вы можете использовать отдельные тесты для проверки различных условий, при которых модель является действительной / недействительной, однако, если вы используете DataAnnotations, я не вижу особого смысла в тестировании, чтобы они и инфраструктура привязки модели работали правильно. Предположительно, Microsoft уже сделала это.
Оригинал, основанный на (ошибочном) предположении, что ViewResult был возвращен
Я думаю, что это должно быть что-то вроде этого.
[TestMethod]
public void TestCreate()
{
// set up
var result = Create( invalidDTO ) as ViewResult;
var modelState = result.ViewData.ModelState;
Assert.IsFalse( modelState.IsValid );
var errors = modelState.Errors;
Assert.AreEqual( 1, errors.Count );
Assert.AreEqual( errors[0].ErrorMessage, "some error message" );
}