Download - Unit Testing 101
![Page 1: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/1.jpg)
some tests yo!You need
Dave Bouwman // CTO // DTSAgile
![Page 2: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/2.jpg)
the “big” ideas
![Page 3: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/3.jpg)
![Page 4: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/4.jpg)
provecode
works
![Page 5: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/5.jpg)
designprove
works
![Page 6: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/6.jpg)
catchregression
![Page 7: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/7.jpg)
![Page 8: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/8.jpg)
101unit testing
![Page 9: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/9.jpg)
Call Method…
Check Results…
Call Method…
Check Results…
Instantiate class under test…
![Page 10: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/10.jpg)
independent
good tests are…
repeatable
self-contained*
professional
![Page 11: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/11.jpg)
focused
good tests are…
![Page 12: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/12.jpg)
tools!
![Page 13: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/13.jpg)
“unit testingon crack”
Scott Hanselmanwww.hanselman.com
![Page 14: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/14.jpg)
![Page 15: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/15.jpg)
![Page 16: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/16.jpg)
![Page 17: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/17.jpg)
![Page 18: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/18.jpg)
testswriting
![Page 19: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/19.jpg)
simple methods
mean simple tests
with simple signatures
![Page 20: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/20.jpg)
mean…
complex methodswith complex signatures
complex tests
![Page 21: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/21.jpg)
most
category
ArcObjectsapplications
fall in this
![Page 22: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/22.jpg)
design we mustfor testing
![Page 23: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/23.jpg)
separationof concerns
![Page 24: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/24.jpg)
singlea class has
purpose
![Page 25: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/25.jpg)
stayinside
itsbox
![Page 26: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/26.jpg)
(events + logic + data access)user interface
![Page 27: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/27.jpg)
private void ButtonOn_Click(){
//read values from controls
//update interface
}
//apply business logic//connect to database//update data
![Page 28: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/28.jpg)
objectsbusiness
objectsdata access
objectsuser interface
![Page 29: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/29.jpg)
Private void ButtonOn_Click(){
//read values from controls
//update interface
}
//apply business logic//connect to database//update data
public class
}
//apply business logic//send changes to DAL
![Page 30: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/30.jpg)
architecturen-tier
![Page 31: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/31.jpg)
objectsbusiness
objectsdata access
objectsuser interface
testsunit
WPF/Silverlight
![Page 32: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/32.jpg)
patterns yodesign
![Page 33: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/33.jpg)
modelviewcontroller
![Page 34: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/34.jpg)
released!!ASP.NET MVC
http://asp.net/mvc
![Page 35: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/35.jpg)
managementdependency
![Page 36: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/36.jpg)
dependencies
![Page 37: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/37.jpg)
created
constructorby the
1
![Page 38: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/38.jpg)
private IAccountRepository _accountRepository;private IFormsAuthentication _formsAuthentication;private ILogService _logger;
public AccountController(){
_accountRepository = new AccountRepository(_connectionString);
_logger = new Logger();_formsAuthentication = new FormsAuthentication();
}
![Page 39: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/39.jpg)
what abouttesting
![Page 40: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/40.jpg)
independent
good tests are…
repeatable
self-contained*
professional
![Page 41: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/41.jpg)
“tight coupling”
externaldependencies
in thetests
![Page 42: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/42.jpg)
dependenciesinternal
![Page 43: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/43.jpg)
separateand
them
![Page 44: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/44.jpg)
pass
constructorinto the
2dependencies
![Page 45: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/45.jpg)
dependencyinjection
![Page 46: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/46.jpg)
private IAccountRepository _accountRepository;private IFormsAuthentication _formsAuthentication;private ILogService _logger;
public AccountController(IAccountRepository accountRepository, IFormsAuthentication formsAuthentication, ILogService logger)
{_accountRepository = accountRepository;_formsAuthentication = formsAuthentication;_logger = logger;
}
![Page 47: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/47.jpg)
problempushed
the
up alevel
![Page 48: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/48.jpg)
of controlinversion
![Page 49: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/49.jpg)
configurationGlobal.asax.cs
I need an AccountController!
![Page 50: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/50.jpg)
![Page 51: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/51.jpg)
mvccontrib IoC Spring.NET
StructureMap
Castle Windsor
Unity
http://mvccontrib.codeplex.com
![Page 52: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/52.jpg)
unit testing…back to
![Page 53: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/53.jpg)
isolatedtesting
![Page 54: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/54.jpg)
&mockfakes
stubs
![Page 55: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/55.jpg)
wrotecode you
on-the-flygenerated
![Page 56: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/56.jpg)
objectsfake
![Page 57: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/57.jpg)
![Page 58: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/58.jpg)
objectsstub/mock
![Page 59: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/59.jpg)
![Page 60: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/60.jpg)
tools!
![Page 61: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/61.jpg)
rhinomocks
http://ayende.com/projects/rhino-mocks.aspx
![Page 62: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/62.jpg)
ArcMapdevelopment
![Page 63: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/63.jpg)
notour
box
![Page 64: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/64.jpg)
![Page 65: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/65.jpg)
separatelogicfrom
wiring
![Page 66: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/66.jpg)
ArcMapevents
emulate
from
![Page 67: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/67.jpg)
sinks…my code
![Page 68: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/68.jpg)
![Page 69: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/69.jpg)
Shim
ArcMapin
ArcMap
IEditEventsBusiness
Logic
![Page 70: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/70.jpg)
testunder
BusinessLogic
TestBusiness
Logic
![Page 71: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/71.jpg)
yourtest
code
ESRI’snot
![Page 72: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/72.jpg)
ArcEngineApplications
![Page 73: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/73.jpg)
it’sour
box
![Page 74: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/74.jpg)
designmatters.
![Page 75: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/75.jpg)
![Page 76: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/76.jpg)
ArcGISServer
![Page 77: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/77.jpg)
Web ADF…testing
![Page 78: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/78.jpg)
servicescustom
![Page 79: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/79.jpg)
ArcGIS Server
WebService
SOC
COMUtility
COMUtilities
![Page 80: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/80.jpg)
ArcGIS Server
WebService
SOC
SOE
ServerObjectExtensions
![Page 81: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/81.jpg)
COMUtility
(ArcObjects)SOECOM
Utility(ArcObjects)
IServerObjectExtension
testableclasses
![Page 82: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/82.jpg)
![Page 83: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/83.jpg)
![Page 84: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/84.jpg)
cool for COM…but i’m too
![Page 85: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/85.jpg)
jsunit
FlexUnit
Silverlight Harness
D.O.H. Unit Testing
![Page 86: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/86.jpg)
resourceshttp://mvccontrib.codeplex.com
http://castleproject.org
http://ASP.NET/mvc
http://ayende.com/projects/rhino-mocks.aspx
http://testdriven.net
http://mbunit.com
![Page 87: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/87.jpg)
writin teztz!i’m in teh codez
![Page 88: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/88.jpg)
can too!and nao u
![Page 89: Unit Testing 101](https://reader034.vdocuments.us/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/89.jpg)
questionshttp://twitter.com/dbouwman
http://slideshare.com/dbouwman
http://blog.davebouwman.net