Download - Unit Testing 101

Transcript
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]