Unit Testing 101

89
some tests yo! You need Dave Bouwman // CTO // DTSAgile

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 of Unit Testing 101

Page 1: Unit Testing 101

some tests yo!You need

Dave Bouwman // CTO // DTSAgile

Page 2: Unit Testing 101

the “big” ideas

Page 3: Unit Testing 101
Page 4: Unit Testing 101

provecode

works

Page 5: Unit Testing 101

designprove

works

Page 6: Unit Testing 101

catchregression

Page 7: Unit Testing 101
Page 8: Unit Testing 101

101unit testing

Page 9: Unit Testing 101

Call Method…

Check Results…

Call Method…

Check Results…

Instantiate class under test…

Page 10: Unit Testing 101

independent

good tests are…

repeatable

self-contained*

professional

Page 11: Unit Testing 101

focused

good tests are…

Page 12: Unit Testing 101

tools!

Page 13: Unit Testing 101

“unit testingon crack”

Scott Hanselmanwww.hanselman.com

Page 14: Unit Testing 101
Page 15: Unit Testing 101
Page 16: Unit Testing 101
Page 17: Unit Testing 101
Page 18: Unit Testing 101

testswriting

Page 19: Unit Testing 101

simple methods

mean simple tests

with simple signatures

Page 20: Unit Testing 101

mean…

complex methodswith complex signatures

complex tests

Page 21: Unit Testing 101

most

category

ArcObjectsapplications

fall in this

Page 22: Unit Testing 101

design we mustfor testing

Page 23: Unit Testing 101

separationof concerns

Page 24: Unit Testing 101

singlea class has

purpose

Page 25: Unit Testing 101

stayinside

itsbox

Page 26: Unit Testing 101

(events + logic + data access)user interface

Page 27: Unit Testing 101

private void ButtonOn_Click(){

//read values from controls

//update interface

}

//apply business logic//connect to database//update data

Page 28: Unit Testing 101

objectsbusiness

objectsdata access

objectsuser interface

Page 29: Unit Testing 101

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

architecturen-tier

Page 31: Unit Testing 101

objectsbusiness

objectsdata access

objectsuser interface

testsunit

WPF/Silverlight

Page 32: Unit Testing 101

patterns yodesign

Page 33: Unit Testing 101

modelviewcontroller

Page 34: Unit Testing 101

released!!ASP.NET MVC

http://asp.net/mvc

Page 35: Unit Testing 101

managementdependency

Page 36: Unit Testing 101

dependencies

Page 37: Unit Testing 101

created

constructorby the

1

Page 38: Unit Testing 101

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

what abouttesting

Page 40: Unit Testing 101

independent

good tests are…

repeatable

self-contained*

professional

Page 41: Unit Testing 101

“tight coupling”

externaldependencies

in thetests

Page 42: Unit Testing 101

dependenciesinternal

Page 43: Unit Testing 101

separateand

them

Page 44: Unit Testing 101

pass

constructorinto the

2dependencies

Page 45: Unit Testing 101

dependencyinjection

Page 46: Unit Testing 101

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

problempushed

the

up alevel

Page 48: Unit Testing 101

of controlinversion

Page 49: Unit Testing 101

configurationGlobal.asax.cs

I need an AccountController!

Page 50: Unit Testing 101
Page 51: Unit Testing 101

mvccontrib IoC Spring.NET

StructureMap

Castle Windsor

Unity

http://mvccontrib.codeplex.com

Page 52: Unit Testing 101

unit testing…back to

Page 53: Unit Testing 101

isolatedtesting

Page 54: Unit Testing 101

&mockfakes

stubs

Page 55: Unit Testing 101

wrotecode you

on-the-flygenerated

Page 56: Unit Testing 101

objectsfake

Page 57: Unit Testing 101
Page 58: Unit Testing 101

objectsstub/mock

Page 59: Unit Testing 101
Page 60: Unit Testing 101

tools!

Page 61: Unit Testing 101

rhinomocks

http://ayende.com/projects/rhino-mocks.aspx

Page 62: Unit Testing 101

ArcMapdevelopment

Page 63: Unit Testing 101

notour

box

Page 64: Unit Testing 101
Page 65: Unit Testing 101

separatelogicfrom

wiring

Page 66: Unit Testing 101

ArcMapevents

emulate

from

Page 67: Unit Testing 101

sinks…my code

Page 68: Unit Testing 101
Page 69: Unit Testing 101

Shim

ArcMapin

ArcMap

IEditEventsBusiness

Logic

Page 70: Unit Testing 101

testunder

BusinessLogic

TestBusiness

Logic

Page 71: Unit Testing 101

yourtest

code

ESRI’snot

Page 72: Unit Testing 101

ArcEngineApplications

Page 73: Unit Testing 101

it’sour

box

Page 74: Unit Testing 101

designmatters.

Page 75: Unit Testing 101
Page 76: Unit Testing 101

ArcGISServer

Page 77: Unit Testing 101

Web ADF…testing

Page 78: Unit Testing 101

servicescustom

Page 79: Unit Testing 101

ArcGIS Server

WebService

SOC

COMUtility

COMUtilities

Page 80: Unit Testing 101

ArcGIS Server

WebService

SOC

SOE

ServerObjectExtensions

Page 81: Unit Testing 101

COMUtility

(ArcObjects)SOECOM

Utility(ArcObjects)

IServerObjectExtension

testableclasses

Page 82: Unit Testing 101
Page 83: Unit Testing 101
Page 84: Unit Testing 101

cool for COM…but i’m too

Page 85: Unit Testing 101

jsunit

FlexUnit

Silverlight Harness

D.O.H. Unit Testing

Page 86: Unit Testing 101

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

writin teztz!i’m in teh codez

Page 88: Unit Testing 101

can too!and nao u

Page 89: Unit Testing 101

questionshttp://twitter.com/dbouwman

http://slideshare.com/dbouwman

http://blog.davebouwman.net

[email protected]