TDD是一个带有ASP.NET MVC 2,NUnit和Rhino Mocks的控制器

Kei*_*ler 6 tdd nunit rhino-mocks asp.net-mvc-2

如果我使用Rhino Mocks,NUnit和ASP.NET MVC 2,那么简单的单元测试会是什么样的,以确认某个控制器是否存在?我试图围绕TDD的概念,但我无法弄清楚如何像"控制器XYZ存在"这样的简单测试.另外,单元测试在视图中测试动作结果会是什么样的

Dar*_*rov 11

确认控制器存在

对其操作进行单元测试强烈建议控制器存在,这将我们带到:

从视图中测试动作结果的单元测试是什么样的

这是一个例子:

public class HomeController: Controller
{
    private readonly IRepository _repository;
    public HomeController(IRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        var customers = _repository.GetCustomers();
        return View(customers);
    }
}
Run Code Online (Sandbox Code Playgroud)

和相应的单元测试:

[Test]
public void HomeController_Index_Action_Should_Fetch_Customers_From_Repo()
{
   // arrange
   var repositoryStub = MockRepository.GenerateStub<IRepository>();
   var sut = new HomeController(repositoryStub);
   var expectedCustomers = new Customer[0];
   repositoryStub
       .Stub(x => x.GetCustomers())
       .Return(expectedCustomers);

   // act
   var actual = sut.Index();

   // assert
   Assert. IsInstanceOfType(typeof(ViewResult), actual);
   var viewResult = (ViewResult)actual;
   Assert.AreEqual(expectedCustomers, viewResult.ViewData.Model);
}
Run Code Online (Sandbox Code Playgroud)

MVCContrib有一些很棒的功能,允许你模拟HttpContext并测试你的路线.