この質問がしばらくの間私を悩ませていたので、この質問がいくつかの興味深い答えを与えることを願っています。
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によってその寿命の1インチ以内にテストされていますか?
私のポイントは本当にあると思う、次のことをすることは全く無意味で間違っているようだ
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
明らかに私はこの誇張して無意味な例に鈍感ですが、ここに追加する知恵はありますか?
それを楽しみにしています...ありがとう。