prdc10-tdd-patterns
-
Upload
amir-barylko -
Category
Technology
-
view
402 -
download
0
Transcript of prdc10-tdd-patterns
![Page 1: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/1.jpg)
![Page 2: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/2.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
AMIR BARYLKOTDD PATTERNS
FOR .NET DEVELOPERSPRAIRIE DEV CON
REGINA 2010
![Page 3: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/3.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
WHO AM I?
• Architect
•Developer
•Mentor
• Great cook
• The one who’s entertaining you for the next hour!
![Page 4: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/4.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
WHY TDD?
• Test first approach
•Quality driven
• Easy to refactor
• Regression tests as byproduct
• Increase developer’s confidence
![Page 5: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/5.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
SETUP
![Page 6: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/6.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
TOOLS
• Testing framework: NUnit, MbUnit, MSpec, MavenThought Testing
• Mocking framework: Rhino Mocks, Moq, TypeMock
• Test Automation: Scripts that can run the test from the developer computer.
• CI server : Unit test should be run after each commit.
• Reports and Notifications: The team should realize right away that the tests are broken.
![Page 7: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/7.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
AUTO MOCKING
• Automatic dependency creation for SUT
•Dictionary of dependencies
• Faster setup of tests
• Build your own: StructureMap
•Or use MavenThought Testing
![Page 8: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/8.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
PATTERNS
![Page 9: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/9.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
ONE FEATURE PER TEST
• Easy to approach
• Easy to understand
• Easy to maintain
• Enforce Given, When, Then
Given That(arrange)
When I Run(act)
Then it should ...(assert)
![Page 10: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/10.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
STATE VERIFICATION
• Care about the end state
•Does not validate SUT transitions
• Verify the state agains the expected value
var m = new Library...
Run Test
m.Count.Should(...)
![Page 11: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/11.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
BEHAVIOUR VERIFICATION
• Checking the expected behaviour happened
• Uses mock objects
• The behaviour is specified for each mock object
• The expected methods should be called
var m = Mock<...>
m.Stub(...)
m.AssertWasCalled(...)
Run Test
![Page 12: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/12.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
TEST WITH PARAMETERS
• Avoid duplication and repetition
• Generic Parameters
• Parameters Factories
• Random strings
• Random numbers
[Row(1)][Row(2)]void Method(int arg)
[Factory(...)]void Method(string arg)
void Method([Random]...)
void Method([Random]..., [Factory]...)
[Row(typeof(...))]void Method<T>(...)
![Page 13: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/13.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
DEPENDENCY INJECTION
• Remove hardcoded dependencies
• Introduces dependency in the constructor / setter
• Easy to test and maintain
• S O L I D
Initialize dependency
Stub dependency with mock
Assert the mock is returned
![Page 14: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/14.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
DEPENDENCY LOOKUP
• Remove hardcoded dependencies
• Introduces a factory or service locator
• Easy to test and maintain
• S O L I D
Initialize service locator
Stub to return a mock
Assert the mock is returned
![Page 15: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/15.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
DATABASE SETUP
• Base class to setup the database
• The test always works with a clean database
• Can be configured to populate data if needed
Create Database
Populate
Retrieve and Assert
Store
![Page 16: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/16.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
QUESTIONS?
![Page 17: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/17.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
RESOURCES
• Contact me: [email protected], @abarylko
•Download: http://www.orhtocoders.com/prairiedevcon
• Books: The rSpec book, xUnit Patterns.
![Page 18: prdc10-tdd-patterns](https://reader033.fdocuments.net/reader033/viewer/2022060108/554f8f5eb4c9052a518b52ce/html5/thumbnails/18.jpg)
Amir Barylko - TDD Patterns MavenThought Inc.
RESOURCES II
•NUnit: http://www.nunit.org
• Gallio & MbUnit: http://www.gallio.org
•MavenThought Testing: http://maventcommons.codeplex.com
• Rhino Mocks: http://www.ayende.com
• StructureMap: http://structuremap.sourcefore.com
• TeamCity: http://www.jetbrains.com