Я надеюсь, что этот вопрос дает некоторые интересные ответы, потому что это тот, который раздражал меня некоторое время.
Есть ли реальная ценность в модульном тестировании контроллера в ASP.NET MVC?
Под этим я подразумеваю, что большую часть времени (и я не гений), мои методы контроллеров, даже в их самом сложном, примерно такие:
public ActionResult Create(MyModel model)
{
// start error list
var errors = new List<string>();
// check model state based on data annotations
if(ModelState.IsValid)
{
// call a service method
if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors))
{
// all is well, data is saved,
// so tell the user they are brilliant
return View("_Success");
}
}
// add errors to model state
errors.ForEach(e => ModelState.AddModelError("", e));
// return view
return View(model);
}
Большая часть тяжелой работы выполняется либо конвейером MVC, либо моей сервисной библиотекой.
Так что, возможно, вопросы могут быть:
- Какова будет ценность модульного тестирования этого метода?
- это не сломалось бы
Request.UserHostAddress
иModelState
с NullReferenceException? Должен ли я пытаться издеваться над этим? - если бы я рефракторил этот метод в многократно используемый «помощник» (что мне, вероятно, следовало бы, учитывая, сколько раз я делаю это!), было бы полезным тестирование, даже если все, что я действительно проверяю, это в основном «конвейер», который, по-видимому, был проверен с точностью до дюйма его жизни Microsoft?
Я думаю , что моя точка действительно есть, делая следующее кажется совершенно бессмысленной и неправильной
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Очевидно, я туплю с этим преувеличенно бессмысленным примером, но есть ли у кого-нибудь еще мудрость, чтобы добавить сюда?
С нетерпением жду этого ... Спасибо.