我希望这个问题能提供一些有趣的答案,因为这是困扰我一段时间的问题。
在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);
}显然,我对这个夸张的,毫无意义的示例感到困惑,但是有人在这里添加任何智慧吗?
期待它...谢谢。