Keith Adler
Keith Adler

Reputation: 21178

TDD a controller with ASP.NET MVC 2, NUnit and Rhino Mocks

What would a simple unit test look like to confirm that a certain controller exists if I am using Rhino Mocks, NUnit and ASP.NET MVC 2? I'm trying to wrap my head around the concept of TDD, but I can't see to figure out how a simple test like "Controller XYZ Exists" would look. In addition, what would the unit test look like to test an Action Result off a view?

Upvotes: 6

Views: 5253

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038770

Confirm that a controller exists

Having unit tests on its actions is a strong suggestion that the controller exists which brings us to:

What would the unit test look like to test an Action Result off a view

Here's an example:

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

    public ActionResult Index()
    {
        var customers = _repository.GetCustomers();
        return View(customers);
    }
}

And the corresponding unit test:

[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);
}

MVCContrib has some great features allowing you to mock HttpContext and also test your routes.

Upvotes: 11

Tomasz Jaskuλa
Tomasz Jaskuλa

Reputation: 16013

Why you would like to test if a controller exists ? What you should do is to test the controller behaviour. Your controller it's a code under test and you put some expectation on it and then you assert if the expectations are met or not.

There is many walkthrough on how to do TDD with ASP.NET MVC. You can start for example here

http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/09/this-is-how-asp-net-mvc-controller-actions-should-be-unit-tested.aspx

Upvotes: 3

Related Questions