{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
30/11/2010
Fala galera.Quem me conhece provavelmente já me ouviu dizer que "em ASP.NET MVC tudo é testável". Sendo assim nossos controllers também são testáveis. Postei muito sobre isso aqui.A verdade é que testar os results dos controllers começa a ficar um pouco chato. Quando o controller retorna um ActionResult.aspx) é chato verificar se a view retornada é a correta:
var result = controller.Action();
Assert.AreEqual("Nome",(result as ViewResult).ViewName);
Esse cast me incomoda.E fica pior quando queremos verificar alguma coisa no model desse ActionResult:
var result = controller.Action();
var model = ((result as ViewResult).ViewData.Model as TipoDoModel);
//algum assert
Ficou pior ainda né?!Pensando nisso decidi criar um projeto com alguns helpers para testar controllers no ASP.NET MVC: MVCTestsEx.A idéia é um projeto simples que encapsule algumas operações de testes. Não quero criar um framework de testes! E é por isso que estou usando o NUnit por debaixo dos panos nesse projeto. Quero escrever algo como:
var result = controller.Action();
result.AssertViewName("SomeName");
Isso independente de ser um ActionResult ou um ViewResult.Uma interface fluent também pode surgir, como sugeriu o Juan Lopes:
var result = controller.Action();
result.Should().Be.View("SomeName");
A princípio estou incluindo alguns dos helpers que eu já utilizo em projetos pessoais. Mas a idéia é que conforme eu consiga tempo vá melhorando a sintaxe e a forma como as coisas estão sendo escritas.
O projeto está no GitHub e pode ser acessado aqui: MVCTestsEx. Você não sabe o que é o GitHub? Em que mundo você vive? Corra aqui, veja o que é(GitHub), estude, e use!Faça um fork do projeto se você achar interessante. Ah, não sabe o que é fork? Corra aqui) e descubra e faça!É isso, o fonte já está lá, com pouca coisa mas caminhando. Esse projeto surgiu enquanto eu trabalhava em outro projeto. Infelizmente eu sou um só, e meus dias são limitados a 24 horas :PAbraços,Vinicius Quaiato.