Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving...

49
Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell · DotNetDevDude.com

Transcript of Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving...

Page 1: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Test Driving .NET

Keith Burnell

Senior Software Engineer

Falafel Software, Inc

@keburnell · DotNetDevDude.com

Page 2: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Little about me

• Microsoft MVP: ASP.NET/IIS

• Senior Software Engineer at Falafel Software, Inc.

• Been developing software for > 15 years

• Primary focus on the Web stack

• Speaker

• Author

Page 3: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Pop quiz

Page 4: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Ever have to deal with spaghetti code?

Page 5: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Ever inherit legacy code?

Page 6: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Ever scared to change code?

Page 7: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

If you answered YES to any of those

questions

Then…

Page 8: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·
Page 9: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Types of testing that are not keys to

test-driven development

Page 10: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Integration Testing

Page 11: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Regression Testing

1 Bug > 1 Bugs

Page 12: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

User Acceptance Testing (UAT)

Page 13: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Performance Testing

Page 14: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Load Testing

Page 15: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Stress Testing

Page 16: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

What is Test-driven Development?

Page 17: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Unit Testing: Key to TDD

@keburnell ∙ DotNetDevDude.com

Page 18: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

What makes a good Unit Test?

Page 19: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Automated and Repeatable

Page 20: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Easy to implement

Page 21: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Run on Demand at the Push of a Button

Page 22: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Fast

Page 23: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Isolated

Page 24: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Important Concepts & Strategies

Page 25: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·
Page 26: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Arrange – Act - Assert

Page 27: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

SOLID Principles of Software Development

Page 28: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Single Responsibility Principle

Page 29: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Open Closed Principle

Page 30: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Liskov Substitution Principle

Page 31: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Interface Segregation Principle

Page 32: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Dependency Inversion Principle

Page 33: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Example Solution

Layout

Page 34: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Naming Your Tests

Page 35: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

How I Name My Tests

• [MethodUnderTest]_[ExpectedResult]_[Conditions]

• GetCustomers_ShouldReturn_ListOf_Customers()

• CalculateRate_ShouldReturn_25_When_Interest_Is_50_And_X_Is_5()

Page 36: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Resharper Live Template for Naming Tests

• My unit testing live template is available on my blog:

– http://www.dotnetdevdude.com/downloads/code/

ResharperUnitTestTemplates.zip

Page 37: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Let’s Write Our First Unit Test - Together!

Page 38: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Dependency Injection (DI)

Page 39: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Inversion of Control (IoC)

Page 40: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

What does implementing DI/IoC get me?

• Separation of Concerns

• Mockability (we will get to this)

Page 41: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Let’s Do Some DI/IoC - Together!

Page 42: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Ruh roh!

Test is broken!

Page 43: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Fakes/Stubs

Page 44: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Mocks

Page 45: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

DI/IoC Tooling

Page 46: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Let’s Implement DI/IoC with Tooling - Together!

Page 47: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Other Resources

• Test Driven Development: By Example (Kent Beck)

• The Art of Unit Testing (Roy Osherove)

• Roy Osherove’s Blog (http://www.osherove.com)

Page 48: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Tools I Used and/or Talked About

• NuGet (http://www.nuget.org)

• ReSharper (http://www.jetbrains.com/resharper/)

• Should Assertion Library (http://should.codeplex.com)

• NCrunch (http://www.ncrunch.net)

• RhinoMocks (http://hibernatingrhinos.com/open-source/rhino-mocks

• StructureMap (http://www.structuremap.net)

Page 49: Test Driving - SDD Conferencesddconf.com/brands/sdd/library/Test_Driving_DotNET.pdf · Test Driving .NET Keith Burnell Senior Software Engineer Falafel Software, Inc @keburnell ·

Thank You!

• Slides and Code:

– github.com/KBurnell/TestDriving.NET

• Me:

– Twitter: @KeBurnell

– Blog: DotNetDevDude.com

– E-Mail: [email protected]