2016-11-28 1 views
0

Стоит ли тестировать параметр действия контроллера MVC для значений null? Цель состоит в том, чтобы гарантировать, что действительные значения переданы действию, и я думаю, что также возможно использование null.C# Unit Testing MVC Controller Действие Параметр для значения Null

Вот действие контроллера:

[HttpPost] 
    public ActionResult Create(ContactViewModel viewModel) 
    { 
     if (!ModelState.IsValid) 
      return View("Create", viewModel); 

     if (viewModel == null) 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "No data received"); 

     var contact = Mapper.Map<Contact>(viewModel); 

     //contact.UserId = User.Identity.GetUserId(); 
     contact.UserId = _user.Id; 

     _unitOfWork.Contacts.Add(contact); 

     _unitOfWork.Complete(); 

     return RedirectToAction("Index"); 
    } 

И мой тест для проверки нулевого параметра:

[TestMethod] 
    public void CreatePost_NullViewModelPassed_ShouldReturnBadRequest() 
    { 
     var result = _controller.Create(null) as HttpStatusCodeResult; 
     result.StatusCode.Should().Be(400); 
    } 

выше тест всегда проходит, но это полезный тест? Я пытался ударить метод столба с Почтальон, но я получаю версию HttpGet моих Create действий:

public ViewResult Create() 
    { 
     return View("Create", new ContactViewModel()); 
    } 
+0

Показать еще немного логики проверяемого метода – Nkosi

+3

Возможно, вам понадобится предоставить больше кода, связанного с вашей проблемой. Постарайтесь представить пример, который является самодостаточным, как можно меньшим и воспроизводит вашу проблему. Что касается ваших тестов, вы должны стараться как можно больше охватить. Если ваш класс/метод принимает нулевое значение (и, особенно, если это нулевое значение может означать разницу в исполнении), вы должны проверить его. Точно так же, если вы не должны принимать нулевые значения, ваш метод должен вызывать «ArgumentNullException» (или аналогичный), который вы должны проверить. – gmiley

ответ

0

Испытание вы письменно должен дать уверенность в тестируемой системе, но и поднять ошибки, где это возможно для решения. Если у вас есть нулевая проверка в вашем методе Create, то это очень действительный тест, чтобы гарантировать, что система не просто «умрет», когда получает нулевое значение, вместо этого оно должно отвечать соответствующим образом, что, по-видимому, делает, получая код состояния из 400 (неудачный запрос), поэтому в целом я бы сказал, что тест очень важен - особенно, когда вы можете в будущем реорганизовать, чтобы представить что-то вроде шаблона репозитория/услуг.

Тесты для метода Create должны охватывать все углы, а не только успешные и безуспешные вызовы, но вызовы с различными значениями в вашей модели просмотра и практически любую комбинацию, которая может изменить логику - например, логические переменные, заключенные в условные выражения выполнять разные задачи на основе определенного значения

Увы, если вы хотите нажать метод «Почта» в Postman, то обязательно измените МЕТОД на POST непосредственно перед URL-адресом.

+0

Я действительно пробовал его с помощью метода «POST» с примером в моем вопросе – Esen

+2

У вас есть атрибут '[ValidateAntiForgeryToken]', применяемый к методу? – ColinM

+0

Я удалил его, прежде чем задавать вопрос для его упрощения, однако, добавив его обратно, вы попали в правильное действие. Спасибо! – Esen