Unit Testing ASP.Net MVC Craig Berntson Mojo Software Worx
Thanks to our Sponsors! To connect to wireless 1. Choose Uguest in the wireless list 2. Open a browser. This will open a Uof U website 3. Choose Login
Ego stuff Organizer, Utah Code Camp Author, “Continuous Integration in .Net” Conference & event speaker INETA Community Speaker ComponentOne Community Influencer Columnist, DNC Magazine 17 time Microsoft MVP Chief Software Gardener Mojo Software Worx Salt Lake City
Problem with… if switch for foreach while do…while
Worse than you think In 1976, G.J. Meyers described a 100-line program that had 1018 unique paths. In 1979 he described a much simpler program. It was just a loop and a few IF statements. In most languages, you could write it in 20 lines of code. This program has 100 trillion paths Testing Computer Software, Cem Kaner
How do you test this?
Agenda What we won’t talk about What we’ll talk about TDD Javascript testing Production ready code What we’ll talk about Setup tests Remove database Keep it simple
Demo: Sample Application
Unit test framework MSTest NUnit xUnit Others
Unit test runner MSTest NUnit Resharper NCrunch Others
Demo: Our first test
Default Data access Difficult to test There is no IDbContext Controller Context Entity Framework Difficult to test There is no IDbContext DbContext tightly bound to EF (EntityFramework.dll)
Removing database access Repositories Mocks Dependency Injection
Repositories Easy to test IRepository Extrapolate away from Context Controller Repository Context Entity Framework Easy to test IRepository Extrapolate away from Context
Mocks Controller Repository Mock Allows us to fake the database
Testing vs. runtime Controller Repository Mock Context Entity Framework
How we normally instantiate Class1 Class2 new Class2()
Dependency injection Class1 ClassA IClass2() ClassA : IClass2
Dependency injection Allows for loose coupling Inversion of control (IOC) IOC Container
Demo: Removing Database access
Selectlist ViewBag ViewModel Automapper
Demo: SELECTLIST
Ajax & json AJAX calls into the controller JSON returns result
Demo: ajax & json
Next steps? My blog Art of Unit Testing Udemy.com Katas TDD
Review Arrange – Act – Assert In memory Repositories Mocks Dependency Injection Automapper
Questions? craig@craigberntson.com @craigber www.craigberntson.com/blog