unit testing asp.net mvc craig berntson mojo software worx
TRANSCRIPT
Unit Testing ASP.Net MVC
Craig BerntsonMojo 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 GardenerMojo Software WorxSalt 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?
6
Agenda
What we won’t talk about TDD
Javascript testing
Production ready code
What we’ll talk about Setup tests
Remove database
Keep it simple
Demo: Sample Application
8
Unit test framework
MSTest
NUnit
xUnit
Others
Unit test runner
MSTest
NUnit
Resharper
NCrunch
Others
Demo: Our first test
11
Default Data access
Difficult to test There is no IDbContext
DbContext tightly bound to EF (EntityFramework.dll)
Controller
Context
Entity Framework
Removing database access
1. Repositories
2. Mocks
3. Dependency Injection
Repositories
Easy to test IRepository
Extrapolate away from Context
Controller
Repository
Context
Entity Framewor
k
Mocks
Allows us to fake the database
Controller
Repository
Mock
Testing vs. runtime
Controller
Repository
Mock
Context
Entity Framewo
rk
Class2
How we normally instantiate
Class1 new Class2()
ClassA
Dependency injection
Class1 IClass2()
ClassA : IClass2
Dependency injection
Allows for loose coupling
Inversion of control (IOC)
IOC Container
Demo: Removing Database access
20
Selectlist
ViewBag
ViewModel
Automapper
Demo: SELECTLIST
22
Ajax & json
AJAX calls into the controller
JSON returns result
Demo: ajax & json
24
Next steps?
My blog
Art of Unit Testing
Udemy.com
Katas
TDD
Review
Arrange – Act – Assert
In memory
Repositories
Mocks
Dependency Injection
Automapper