나는이 질문이 흥미로운 답변을 제공하기를 바랍니다.
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 파이프 라인 또는 서비스 라이브러리에서 수행됩니다.
따라서 물어볼 질문은 다음과 같습니다.
- 이 방법을 테스트하는 단위의 가치는 무엇입니까?
- NullReferenceException
Request.UserHostAddress
과ModelState
함께 중단되지 않습니까? 이것들을 조롱하려고해야합니까? - 이 방법을 재사용 할 수있는 "도우미"로 굴절 시키면 (내가 몇 번이나 할 것인지를 고려할 것입니다!) 실제로 테스트하는 모든 것이 대부분 "파이프 라인"일 때 가치가있는 테스트 일 것입니다. 아마도 Microsoft에 의해 수명의 1 인치 이내에 테스트 되었습니까?
내 요점은 실제로 다음을 수행하는 것이 전혀 의미가없고 잘못 된 것 같습니다.
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
분명히 나는이 과장되고 무의미한 예에 둔감하고 있지만 여기에 추가 할 지혜가 있습니까?
기대하고 있습니다 ... 감사합니다.