unit testing 101
DESCRIPTION
Unit Testing 101 presented at ESRI Developer Summit, March 24th, 2009. This talk reviews the key concepts of unit testing, the technologies used by DTSAgile in out development projects.TRANSCRIPT
![Page 1: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/1.jpg)
some tests yo!You need
Dave Bouwman // CTO // DTSAgile
![Page 2: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/2.jpg)
the “big” ideas
![Page 3: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/3.jpg)
![Page 4: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/4.jpg)
provecode
works
![Page 5: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/5.jpg)
designprove
works
![Page 6: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/6.jpg)
catchregression
![Page 7: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/7.jpg)
![Page 8: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/8.jpg)
101unit testing
![Page 9: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/10.jpg)
independent
good tests are…
repeatable
self-contained*
professional
![Page 11: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/11.jpg)
focused
good tests are…
![Page 12: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/12.jpg)
tools!
![Page 13: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/13.jpg)
“unit testingon crack”
Scott Hanselmanwww.hanselman.com
![Page 14: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/14.jpg)
![Page 15: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/15.jpg)
![Page 16: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/16.jpg)
![Page 17: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/17.jpg)
![Page 18: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/18.jpg)
testswriting
![Page 19: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/19.jpg)
simple methods
mean simple tests
with simple signatures
![Page 20: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/20.jpg)
mean…
complex methodswith complex signatures
complex tests
![Page 21: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/21.jpg)
most
category
ArcObjectsapplications
fall in this
![Page 22: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/22.jpg)
design we mustfor testing
![Page 23: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/23.jpg)
separationof concerns
![Page 24: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/24.jpg)
singlea class has
purpose
![Page 25: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/25.jpg)
stayinside
itsbox
![Page 26: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/26.jpg)
(events + logic + data access)user interface
![Page 27: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/28.jpg)
objectsbusiness
objectsdata access
objectsuser interface
![Page 29: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/30.jpg)
architecturen-tier
![Page 31: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/31.jpg)
objectsbusiness
objectsdata access
objectsuser interface
testsunit
WPF/Silverlight
![Page 32: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/32.jpg)
patterns yodesign
![Page 33: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/33.jpg)
modelviewcontroller
![Page 34: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/34.jpg)
released!!ASP.NET MVC
http://asp.net/mvc
![Page 35: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/35.jpg)
managementdependency
![Page 36: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/36.jpg)
dependencies
![Page 37: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/37.jpg)
created
constructorby the
1
![Page 38: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/39.jpg)
what abouttesting
![Page 40: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/40.jpg)
independent
good tests are…
repeatable
self-contained*
professional
![Page 41: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/41.jpg)
“tight coupling”
externaldependencies
in thetests
![Page 42: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/42.jpg)
dependenciesinternal
![Page 43: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/43.jpg)
separateand
them
![Page 44: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/44.jpg)
pass
constructorinto the
2dependencies
![Page 45: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/45.jpg)
dependencyinjection
![Page 46: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/47.jpg)
problempushed
the
up alevel
![Page 48: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/48.jpg)
of controlinversion
![Page 49: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/49.jpg)
configurationGlobal.asax.cs
I need an AccountController!
![Page 50: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/50.jpg)
![Page 51: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/52.jpg)
unit testing…back to
![Page 53: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/53.jpg)
isolatedtesting
![Page 54: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/54.jpg)
&mockfakes
stubs
![Page 55: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/55.jpg)
wrotecode you
on-the-flygenerated
![Page 56: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/56.jpg)
objectsfake
![Page 57: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/57.jpg)
![Page 58: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/58.jpg)
objectsstub/mock
![Page 59: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/59.jpg)
![Page 60: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/60.jpg)
tools!
![Page 61: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/61.jpg)
rhinomocks
http://ayende.com/projects/rhino-mocks.aspx
![Page 62: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/62.jpg)
ArcMapdevelopment
![Page 63: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/63.jpg)
notour
box
![Page 64: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/64.jpg)
![Page 65: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/65.jpg)
separatelogicfrom
wiring
![Page 66: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/66.jpg)
ArcMapevents
emulate
from
![Page 67: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/67.jpg)
sinks…my code
![Page 68: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/68.jpg)
![Page 69: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/69.jpg)
Shim
ArcMapin
ArcMap
IEditEventsBusiness
Logic
![Page 70: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/70.jpg)
testunder
BusinessLogic
TestBusiness
Logic
![Page 71: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/71.jpg)
yourtest
code
ESRI’snot
![Page 72: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/72.jpg)
ArcEngineApplications
![Page 73: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/73.jpg)
it’sour
box
![Page 74: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/74.jpg)
designmatters.
![Page 75: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/75.jpg)
![Page 76: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/76.jpg)
ArcGISServer
![Page 77: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/77.jpg)
Web ADF…testing
![Page 78: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/78.jpg)
servicescustom
![Page 79: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/79.jpg)
ArcGIS Server
WebService
SOC
COMUtility
COMUtilities
![Page 80: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/80.jpg)
ArcGIS Server
WebService
SOC
SOE
ServerObjectExtensions
![Page 81: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/81.jpg)
COMUtility
(ArcObjects)SOECOM
Utility(ArcObjects)
IServerObjectExtension
testableclasses
![Page 82: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/82.jpg)
![Page 83: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/83.jpg)
![Page 84: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/84.jpg)
cool for COM…but i’m too
![Page 85: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/85.jpg)
jsunit
FlexUnit
Silverlight Harness
D.O.H. Unit Testing
![Page 86: Unit Testing 101](https://reader034.vdocument.in/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.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/87.jpg)
writin teztz!i’m in teh codez
![Page 88: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/88.jpg)
can too!and nao u
![Page 89: Unit Testing 101](https://reader034.vdocument.in/reader034/viewer/2022042601/54c6f68d4a79596e7b8b45b5/html5/thumbnails/89.jpg)
questionshttp://twitter.com/dbouwman
http://slideshare.com/dbouwman
http://blog.davebouwman.net