SlideShare uma empresa Scribd logo
1 de 15
Test Driven Development Thousands of Red-Green-Refactor after… UGIALT.NET – Milano  23-01-2010 Omid Ehsani Senior Consultant & Solution Architect omid.ehsani@lightcode.net
Automated Testing Good Automated Tests should be: Isolated, Fast, Repeatable, Maintainable, … How can we achieve those goals? Do the same rules ensure good Automated Test Suites (ATS)? Any difference for one-man-band or team?
Working in Team Consider typical scenarios Rebuilding development machines Introducing new developers Introducing Continuous Integration servers Make building and running ATS easy Put under source control build requirements Minimize test dependencies with external configuration Make tests running fast
ATS Organization Include tests in the same Visual Studio solution (but in separate projects) Separate different test types (mostly Unit Tests from Integration Tests) Human factor: how frequently developers run automated tests? Create a safe green zone
Finding tests Where are my project tests? Where are my class tests? Where are my method tests? Map tests to your system under test (SUT) Use naming and namespaces to define project/assembly tests Unit testing One test class per SUT class One or more test methods per SUT method Integration / user acceptance testing One test class per feature ATS Mapping
Write ReadableTests Naming Naming unit tests Naming variables Meaningful asserts Explicit test sections (AAA, SEV, …) Test method in a screen Setting up and tearing down Explicit Data
Writing Trustworthy Tests When to remove or change tests Production or test bugs Semantics or API changes or Refactoring  Duplicated tests Avoid logic in tests Don’t use loops and conditionals Harder to read, likely to have bugs, difficult to name Testing only one thing Improper naming, failing asserts
Write Maintainable Tests Testing private o protected methods Making methods public Extracting methods to new classes Making methods internal Removing duplication Using helper methods Using [SetUp] Test class inheritance Use domain object names in comments and assertion messages Simplify refactoring/renaming with smart tools like ReSharper.
Your Application’s Test API Test utilities and helpers Make test API known to developers Test class inheritance patterns DRY (Don’t Repeat Yourself) Creating testing guidance for developers
Test class inheritance patterns Abstract test infrastructure class Base class containing essential common infrastructure.  Common setup and teardown. Template test class Base class containing abstract test methods that derived classes must implement. Multiple implementations of same interface. Abstract test driver class Base class containing test method implementations inherited by all deriving classes. Testing  class hierarchies.
Assertions Antipatterns The Giant: Too many assertions in a test (God Object?) Multiple aspects of same object (state check, identity) The Dodger: Lots of minor asserts checking side-effects but none testing core desired behavior (database testing) The Free Ride: Instead of writing a new test case assertions are added to an existing one Overspecifying tests The Inspector: Specifying purely internal behavior Using mocks instead of stubs The Nitpicker: Assuming exact and complete match when not needed
Setup Antipatterns Initialize objects in [SetUp] used only in some of tests Excessive Setup: setup “noise” make test hard to read Fakes and mocks initialized in [SetUp] The Mockery: too many mocks and stubs move the test focus on fake data instead of SUT
Isolation Antipatterns Generous Leftovers: constrainted test order The Peeping Tom: Shared state corruption Hidden test call The Local Hero: Test running only on development box and failing elsewhere Have your Continuous Integration up and running
Other Antipatterns The Loudmouth: test cluttering console with diagnostic messages. The Secret Catcher: Apparently no asserts, test success relying on framework exception catching The Enumerator: Test case method names like test1, test2, test3,… Success Against All Odds: test written as pass first rather than fail first
Happy TDD! ,[object Object]

Mais conteúdo relacionado

Mais procurados

Unit Testing Fundamentals
Unit Testing FundamentalsUnit Testing Fundamentals
Unit Testing Fundamentals
Richard Paul
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real World
Dror Helper
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)
Foyzul Karim
 
Roy Osherove on Unit Testing Good Practices and Horrible Mistakes
Roy Osherove on Unit Testing Good Practices and Horrible MistakesRoy Osherove on Unit Testing Good Practices and Horrible Mistakes
Roy Osherove on Unit Testing Good Practices and Horrible Mistakes
Roy Osherove
 

Mais procurados (20)

An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit Testing
 
A Beginer's Guide to testing in Django
A Beginer's Guide to testing in DjangoA Beginer's Guide to testing in Django
A Beginer's Guide to testing in Django
 
Unit Testing Fundamentals
Unit Testing FundamentalsUnit Testing Fundamentals
Unit Testing Fundamentals
 
Unit & integration testing
Unit & integration testingUnit & integration testing
Unit & integration testing
 
Unit Tests And Automated Testing
Unit Tests And Automated TestingUnit Tests And Automated Testing
Unit Tests And Automated Testing
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Unit Testing Your Application
Unit Testing Your ApplicationUnit Testing Your Application
Unit Testing Your Application
 
Testing for Android: When, Where, and How to Successfully Use Test Automation
Testing for Android: When, Where, and How to Successfully Use Test AutomationTesting for Android: When, Where, and How to Successfully Use Test Automation
Testing for Android: When, Where, and How to Successfully Use Test Automation
 
Unit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesUnit Testing Concepts and Best Practices
Unit Testing Concepts and Best Practices
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real World
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Intro To Unit and integration Testing
Intro To Unit and integration TestingIntro To Unit and integration Testing
Intro To Unit and integration Testing
 
Test driven development in .Net - 2010 + Eclipse
Test driven development in .Net - 2010 + EclipseTest driven development in .Net - 2010 + Eclipse
Test driven development in .Net - 2010 + Eclipse
 
Unit Testing Android Applications
Unit Testing Android ApplicationsUnit Testing Android Applications
Unit Testing Android Applications
 
Unit testing
Unit testing Unit testing
Unit testing
 
Unit testing - the hard parts
Unit testing - the hard partsUnit testing - the hard parts
Unit testing - the hard parts
 
Roy Osherove on Unit Testing Good Practices and Horrible Mistakes
Roy Osherove on Unit Testing Good Practices and Horrible MistakesRoy Osherove on Unit Testing Good Practices and Horrible Mistakes
Roy Osherove on Unit Testing Good Practices and Horrible Mistakes
 
Automated Testing for Web Applications - Wurbe #36
Automated Testing for Web Applications - Wurbe #36Automated Testing for Web Applications - Wurbe #36
Automated Testing for Web Applications - Wurbe #36
 

Semelhante a Tdd Ugialtnet Jan2010

justin presentation upload PPT june 19
justin presentation upload PPT june 19justin presentation upload PPT june 19
justin presentation upload PPT june 19
techweb08
 
justin for ppt1 by browse button
justin for ppt1 by browse buttonjustin for ppt1 by browse button
justin for ppt1 by browse button
techweb08
 
upload ppt by browse button
upload ppt by browse buttonupload ppt by browse button
upload ppt by browse button
techweb08
 
Paper PsUpload
Paper PsUploadPaper PsUpload
Paper PsUpload
techweb08
 
justin presentation Slideshare PPT upload June 25 Final one
justin presentation Slideshare PPT upload June 25 Final onejustin presentation Slideshare PPT upload June 25 Final one
justin presentation Slideshare PPT upload June 25 Final one
techweb08
 
upload ppt1 by browse button
upload ppt1 by browse buttonupload ppt1 by browse button
upload ppt1 by browse button
techweb08
 
upload ppt by browse button
upload ppt by browse buttonupload ppt by browse button
upload ppt by browse button
techweb08
 
Justin Presentation PPT Upload June 25 adv
Justin Presentation PPT Upload June 25 advJustin Presentation PPT Upload June 25 adv
Justin Presentation PPT Upload June 25 adv
techweb08
 

Semelhante a Tdd Ugialtnet Jan2010 (20)

Unit tests and TDD
Unit tests and TDDUnit tests and TDD
Unit tests and TDD
 
JavaScript Unit Testing
JavaScript Unit TestingJavaScript Unit Testing
JavaScript Unit Testing
 
Unit testing basics with NUnit and Visual Studio
Unit testing basics with NUnit and Visual StudioUnit testing basics with NUnit and Visual Studio
Unit testing basics with NUnit and Visual Studio
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.
 
Implementing TDD in for .net Core applications
Implementing TDD in for .net Core applicationsImplementing TDD in for .net Core applications
Implementing TDD in for .net Core applications
 
12 Rational Solo Pruebas 2009
12 Rational Solo Pruebas 200912 Rational Solo Pruebas 2009
12 Rational Solo Pruebas 2009
 
Paper CS
Paper CSPaper CS
Paper CS
 
alkatest7
alkatest7alkatest7
alkatest7
 
justin presentation upload PPT june 19
justin presentation upload PPT june 19justin presentation upload PPT june 19
justin presentation upload PPT june 19
 
justin for ppt1 by browse button
justin for ppt1 by browse buttonjustin for ppt1 by browse button
justin for ppt1 by browse button
 
Paper Ps
Paper PsPaper Ps
Paper Ps
 
upload ppt by browse button
upload ppt by browse buttonupload ppt by browse button
upload ppt by browse button
 
Paper PsUpload
Paper PsUploadPaper PsUpload
Paper PsUpload
 
justin presentation Slideshare PPT upload June 25 Final one
justin presentation Slideshare PPT upload June 25 Final onejustin presentation Slideshare PPT upload June 25 Final one
justin presentation Slideshare PPT upload June 25 Final one
 
Paper Ps
Paper PsPaper Ps
Paper Ps
 
upload ppt1 by browse button
upload ppt1 by browse buttonupload ppt1 by browse button
upload ppt1 by browse button
 
Paper Ps
Paper PsPaper Ps
Paper Ps
 
Paper Ps
Paper PsPaper Ps
Paper Ps
 
upload ppt by browse button
upload ppt by browse buttonupload ppt by browse button
upload ppt by browse button
 
Justin Presentation PPT Upload June 25 adv
Justin Presentation PPT Upload June 25 advJustin Presentation PPT Upload June 25 adv
Justin Presentation PPT Upload June 25 adv
 

Último

Último (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

Tdd Ugialtnet Jan2010

  • 1. Test Driven Development Thousands of Red-Green-Refactor after… UGIALT.NET – Milano 23-01-2010 Omid Ehsani Senior Consultant & Solution Architect omid.ehsani@lightcode.net
  • 2. Automated Testing Good Automated Tests should be: Isolated, Fast, Repeatable, Maintainable, … How can we achieve those goals? Do the same rules ensure good Automated Test Suites (ATS)? Any difference for one-man-band or team?
  • 3. Working in Team Consider typical scenarios Rebuilding development machines Introducing new developers Introducing Continuous Integration servers Make building and running ATS easy Put under source control build requirements Minimize test dependencies with external configuration Make tests running fast
  • 4. ATS Organization Include tests in the same Visual Studio solution (but in separate projects) Separate different test types (mostly Unit Tests from Integration Tests) Human factor: how frequently developers run automated tests? Create a safe green zone
  • 5. Finding tests Where are my project tests? Where are my class tests? Where are my method tests? Map tests to your system under test (SUT) Use naming and namespaces to define project/assembly tests Unit testing One test class per SUT class One or more test methods per SUT method Integration / user acceptance testing One test class per feature ATS Mapping
  • 6. Write ReadableTests Naming Naming unit tests Naming variables Meaningful asserts Explicit test sections (AAA, SEV, …) Test method in a screen Setting up and tearing down Explicit Data
  • 7. Writing Trustworthy Tests When to remove or change tests Production or test bugs Semantics or API changes or Refactoring Duplicated tests Avoid logic in tests Don’t use loops and conditionals Harder to read, likely to have bugs, difficult to name Testing only one thing Improper naming, failing asserts
  • 8. Write Maintainable Tests Testing private o protected methods Making methods public Extracting methods to new classes Making methods internal Removing duplication Using helper methods Using [SetUp] Test class inheritance Use domain object names in comments and assertion messages Simplify refactoring/renaming with smart tools like ReSharper.
  • 9. Your Application’s Test API Test utilities and helpers Make test API known to developers Test class inheritance patterns DRY (Don’t Repeat Yourself) Creating testing guidance for developers
  • 10. Test class inheritance patterns Abstract test infrastructure class Base class containing essential common infrastructure. Common setup and teardown. Template test class Base class containing abstract test methods that derived classes must implement. Multiple implementations of same interface. Abstract test driver class Base class containing test method implementations inherited by all deriving classes. Testing class hierarchies.
  • 11. Assertions Antipatterns The Giant: Too many assertions in a test (God Object?) Multiple aspects of same object (state check, identity) The Dodger: Lots of minor asserts checking side-effects but none testing core desired behavior (database testing) The Free Ride: Instead of writing a new test case assertions are added to an existing one Overspecifying tests The Inspector: Specifying purely internal behavior Using mocks instead of stubs The Nitpicker: Assuming exact and complete match when not needed
  • 12. Setup Antipatterns Initialize objects in [SetUp] used only in some of tests Excessive Setup: setup “noise” make test hard to read Fakes and mocks initialized in [SetUp] The Mockery: too many mocks and stubs move the test focus on fake data instead of SUT
  • 13. Isolation Antipatterns Generous Leftovers: constrainted test order The Peeping Tom: Shared state corruption Hidden test call The Local Hero: Test running only on development box and failing elsewhere Have your Continuous Integration up and running
  • 14. Other Antipatterns The Loudmouth: test cluttering console with diagnostic messages. The Secret Catcher: Apparently no asserts, test success relying on framework exception catching The Enumerator: Test case method names like test1, test2, test3,… Success Against All Odds: test written as pass first rather than fail first
  • 15.
  • 16. ResourcesRoy Osherove The art of unit testing Kent Beck Test-Driven Development by example omid.ehsani@lightcode.net