SlideShare a Scribd company logo
Unit Testing Guidelines
                 Why, What and How...




@jhooks | 2010 | joelhooks.com
Why?
                It’s such a pain.
                there is never enough time!




@jhooks | 2010 | joelhooks.com
Sanity.
                Developers want a productive environment where
                things work as expected.
                Unit test can help create this environment at the code level.




@jhooks | 2010 | joelhooks.com
Protect your work.
                We work hard on the functionality that we add to the
                application.
                Unit tests serve as a guard against accidental “harm” of code.




@jhooks | 2010 | joelhooks.com
Developer documentation.
                Well written unit test provide excellent documentation
                for other developers.
                Unit tests describe how a piece of logical code should work in a way that English
                language docs often can’t.




@jhooks | 2010 | joelhooks.com
Collective ownership.
                Code that is protected can be worked on by anybody
                with greater assurance that nothing will be accidentally
                broken.




@jhooks | 2010 | joelhooks.com
Fearless refactoring.
                Code can be constantly improved upon with less fear
                of accidental breakage.
                Unit tests verify that changes don’t break the existing logic.




@jhooks | 2010 | joelhooks.com
What should be tested?
                 Models
                 Service classes
                 Commands
                 Utility classes
                 any other logical code




@jhooks | 2010 | joelhooks.com
When to write tests...
                 Before you write the code?
                 After you write the code?




@jhooks | 2010 | joelhooks.com
Test Driven Development




                                 10 Ways to Improve Your Code - Neal Ford




@jhooks | 2010 | joelhooks.com
Less fear.
                Writing unit tests firsts lets you focus on the
                functionality you are adding.
                Write the test. Write the code. Tests pass. Done.




@jhooks | 2010 | joelhooks.com
Ensure test coverage.
                Tests written before production code ensures that the
                production code is tested.
                Tests are not an afterthought.




@jhooks | 2010 | joelhooks.com
Reduces tedium of testing.
                Wait... What?!
                Writing tests before the production code eliminates the need for a massive testing
                effort after the code is written.




@jhooks | 2010 | joelhooks.com
Guarantees testable code.
                Testing first ensures that the production code can be
                tested.
                Testing after often results in the discovery that the code isn’t testable without
                refactoring. Refactoring that isn’t protected by tests.




@jhooks | 2010 | joelhooks.com
TDD is not a guarantee.
                Like most practices, TDD is no guarantee of quality or
                success in development.
                It is a tool.




@jhooks | 2010 | joelhooks.com
So when should I test?
                Test driven development is not required.
                Try it out. It can be painful to start, but once you get a rhythm going the benefits
                are very real.




@jhooks | 2010 | joelhooks.com
What is a good unit test?
                     automated
                     repeatable
                     run by anybody
                     future use
                     fast
                     single push
                     easy




@jhooks | 2010 | joelhooks.com
Unit tests are by developers for developers.
             Quality over quantity please.




@jhooks | 2010 | joelhooks.com
Trustworthy
                Developers will run and use tests they trust.
                A trustworthy test is free of bugs and does what it says it does.




@jhooks | 2010 | joelhooks.com
Tests are written to last.
                Most tests are not meant to be temporary. They
                change for very specific reasons

                Bugs in production code
                Bugs in the test
                API updates in the production code
                Test is no longer valid or is not needed
                To eliminate duplication




@jhooks | 2010 | joelhooks.com
There is no logic in the test.
                Logic in a unit tests makes the test harder to read and
                understand. There is more likely to be bugs in the test.
                It can also make the test harder to name.

                There should be no switch, if, or else statements.
                There should be no for each, for, or while statements.
                The test is a series of method calls with no control flow.




@jhooks | 2010 | joelhooks.com
Only one thing is tested.
                A unit test is testing a single behavior. Testing multiple
                things makes a test hard to understand.

                Assert only one thing.
                Should be easy to name (you don’t need an and in the name).
                When it fails, it is clear what actually failed.




@jhooks | 2010 | joelhooks.com
Maintainable
                Unmaintainable tests are ignored and are often
                simply removed from the suite.
                Unmaintainable tests cannot be trusted.




@jhooks | 2010 | joelhooks.com
Test the API
                Unit tests are written against the public contract of the
                unit being tested. We shouldn’t be trying to test
                private methods.

                Private and protected methods can affect the outcome of public methods.
                Does it make sense to make a private method public?
                Test the results of the public API that uses private methods
                Is the private method pure utility? Would it makes sense as a static method of a
                utility class?




@jhooks | 2010 | joelhooks.com
Avoid duplication (DRY)
                Avoiding the duplication of code in unit tests is as, if
                not more, important than it is with production code.

                Create helper methods like factories to assist in setup of common items
                Use setup methods for setup of items common to all test methods in the case
                Setup should be as short, simple, and as easy to read as possible




@jhooks | 2010 | joelhooks.com
Tests should be isolated.
                Don’t try to use Parsley, configure and access remote
                services, or otherwise try to simulate the broader
                application in a unit test.

                Are test methods constrained to a linear order of execution?
                Is the test calling other test methods?
                Do tests share global state?
                Test behaviors, not workflows.
                If shared state can’t be avoid, be sure to reset it in the teardown.




@jhooks | 2010 | joelhooks.com
Avoid multiple asserts.
                Unit tests are testing specific single behaviors. It seems
                like more work because results might be related, but
                the results should be verified independently.

                Give each assertion its own test
                Give each test a meaningful name
                This makes failures easy to understand and fix




@jhooks | 2010 | joelhooks.com
Avoid over-specification.
                Tests shouldn’t make assumptions about the
                implementation of behavior, instead they should focus
                on the results of the behavior.

                Does the test specify purely internal behavior of the unit?
                Is the test using complicated mock objects when simple stubs would be enough?
                Does the test assume specific results when it isn’t required?




@jhooks | 2010 | joelhooks.com
Readable
                Code in tests is easy to understand quickly. What is
                being tested is recognizable instantly without
                deciphering or translation.
                Readable tests are more trustworthy and maintainable.




@jhooks | 2010 | joelhooks.com
Standard test names.
                If all tests are named in the same pattern they will be
                easy to read..



              methodUnderTest_descriptionOfState_expectedBehavior()




@jhooks | 2010 | joelhooks.com
Good variable names.
                As with all code, good variable names can help
                greatly in making the code readable.

                Avoid abbreviations
                Use static constants instead of hardcoded values




@jhooks | 2010 | joelhooks.com
Consistent test structure.
                Setup -> Action -> Assert


         [Test]
         public function doSomeWork_workWasDone_isTrue()
         {
             //setup
             var aDependency:ISomeDependency = new SomeDependency();

                  //execute behavior
                  aDependency.doSomeWork();

                  //verify expected state is valid
                  assertThat(allTestsNeedThis.workWasDone, isTrue());
         }




@jhooks | 2010 | joelhooks.com

More Related Content

What's hot

Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
Dror Helper
 
Clean Unit Test Patterns
Clean Unit Test PatternsClean Unit Test Patterns
Clean Unit Test Patterns
Frank Appel
 
An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit Testing
Joe Tremblay
 
Unit testing best practices
Unit testing best practicesUnit testing best practices
Unit testing best practicesnickokiss
 
Workshop unit test
Workshop   unit testWorkshop   unit test
Workshop unit test
Francesco Garavaglia
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
ikhwanhayat
 
Unit testing
Unit testingUnit testing
Unit testing
princezzlove
 
Unit Testing Best Practices
Unit Testing Best PracticesUnit Testing Best Practices
Unit Testing Best PracticesTomaš Maconko
 
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 WorldDror Helper
 
UNIT TESTING
UNIT TESTINGUNIT TESTING
UNIT TESTING
Marius Crisan
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration Testing
David Berliner
 
Best practices unit testing
Best practices unit testing Best practices unit testing
Best practices unit testing
Tricode (part of Dept)
 
Unit Testing Fundamentals
Unit Testing FundamentalsUnit Testing Fundamentals
Unit Testing FundamentalsRichard Paul
 
Unit Tests And Automated Testing
Unit Tests And Automated TestingUnit Tests And Automated Testing
Unit Tests And Automated Testing
Lee Englestone
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
Mike Lively
 
Software Quality via Unit Testing
Software Quality via Unit TestingSoftware Quality via Unit Testing
Software Quality via Unit Testing
Shaun Abram
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
François Camus
 
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
UTC Fire & Security
 
Unit testing best practices with JUnit
Unit testing best practices with JUnitUnit testing best practices with JUnit
Unit testing best practices with JUnit
inTwentyEight Minutes
 

What's hot (20)

Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
Clean Unit Test Patterns
Clean Unit Test PatternsClean Unit Test Patterns
Clean Unit Test Patterns
 
An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit Testing
 
Unit testing best practices
Unit testing best practicesUnit testing best practices
Unit testing best practices
 
Workshop unit test
Workshop   unit testWorkshop   unit test
Workshop unit test
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Unit testing
Unit testingUnit testing
Unit testing
 
Unit Testing Best Practices
Unit Testing Best PracticesUnit Testing Best Practices
Unit Testing Best Practices
 
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
UNIT TESTINGUNIT TESTING
UNIT TESTING
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration Testing
 
Best practices unit testing
Best practices unit testing Best practices unit testing
Best practices unit testing
 
Unit Testing Fundamentals
Unit Testing FundamentalsUnit Testing Fundamentals
Unit Testing Fundamentals
 
Unit Tests And Automated Testing
Unit Tests And Automated TestingUnit Tests And Automated Testing
Unit Tests And Automated Testing
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
Software Quality via Unit Testing
Software Quality via Unit TestingSoftware Quality via Unit Testing
Software Quality via Unit Testing
 
Unit testing
Unit testingUnit testing
Unit testing
 
Unit Testing
Unit TestingUnit Testing
Unit 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 best practices with JUnit
Unit testing best practices with JUnitUnit testing best practices with JUnit
Unit testing best practices with JUnit
 

Viewers also liked

Robotlegs AS3 from Flash and the City 2010
Robotlegs AS3 from Flash and the City 2010Robotlegs AS3 from Flash and the City 2010
Robotlegs AS3 from Flash and the City 2010
Joel Hooks
 
Misconceptions Of Unit Testing
Misconceptions Of Unit TestingMisconceptions Of Unit Testing
Misconceptions Of Unit Testing
Terry Yin
 
Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & Jasmine
Remus Langu
 
Testing check list
Testing check listTesting check list
Testing check listAtul Pant
 
TDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and JasmineTDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and Jasmine
Luis Sánchez Castellanos
 
Testcase Preparation Checklist
Testcase Preparation ChecklistTestcase Preparation Checklist
Testcase Preparation Checklist
Sreeram Kishore Chavali
 
TESTING Checklist
TESTING Checklist TESTING Checklist
TESTING Checklist Febin Chacko
 
A Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy OsheroveA Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy Osherove
Roy Osherove
 
Clean code
Clean codeClean code
Clean code
Bulat Shakirzyanov
 
Security testing
Security testingSecurity testing
Security testing
Rihab Chebbah
 
Checklist for website testing
Checklist for website testingChecklist for website testing
Checklist for website testing
Tricode (part of Dept)
 
Matching test items
Matching test itemsMatching test items
Matching test items
aelnogab
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPTsuhasreddy1
 

Viewers also liked (15)

Robotlegs AS3 from Flash and the City 2010
Robotlegs AS3 from Flash and the City 2010Robotlegs AS3 from Flash and the City 2010
Robotlegs AS3 from Flash and the City 2010
 
Misconceptions Of Unit Testing
Misconceptions Of Unit TestingMisconceptions Of Unit Testing
Misconceptions Of Unit Testing
 
Behavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & JasmineBehavior Driven Development with AngularJS & Jasmine
Behavior Driven Development with AngularJS & Jasmine
 
Jasmine BDD for Javascript
Jasmine BDD for JavascriptJasmine BDD for Javascript
Jasmine BDD for Javascript
 
Testing check list
Testing check listTesting check list
Testing check list
 
TDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and JasmineTDD Basics with Angular.js and Jasmine
TDD Basics with Angular.js and Jasmine
 
Testcase Preparation Checklist
Testcase Preparation ChecklistTestcase Preparation Checklist
Testcase Preparation Checklist
 
TESTING Checklist
TESTING Checklist TESTING Checklist
TESTING Checklist
 
A Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy OsheroveA Second Look at Unit Testing by Roy Osherove
A Second Look at Unit Testing by Roy Osherove
 
Clean code
Clean codeClean code
Clean code
 
Security testing
Security testingSecurity testing
Security testing
 
Checklist for website testing
Checklist for website testingChecklist for website testing
Checklist for website testing
 
Matching test items
Matching test itemsMatching test items
Matching test items
 
UNIT TESTING PPT
UNIT TESTING PPTUNIT TESTING PPT
UNIT TESTING PPT
 
Checklist
ChecklistChecklist
Checklist
 

Similar to Unit Testing Guidelines

Unit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking SkeletonUnit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking Skeleton
Seb Rose
 
TDD Best Practices
TDD Best PracticesTDD Best Practices
TDD Best Practices
Attila Bertók
 
JavaScript Unit Testing
JavaScript Unit TestingJavaScript Unit Testing
JavaScript Unit Testing
L&T Technology Services Limited
 
Unit Testing and TDD 2017
Unit Testing and TDD 2017Unit Testing and TDD 2017
Unit Testing and TDD 2017
Xavi Hidalgo
 
Test driven development(tdd)
Test driven development(tdd)Test driven development(tdd)
Test driven development(tdd)
Omar Youssef Shiha
 
Unit testing (Exploring the other side as a tester)
Unit testing (Exploring the other side as a tester)Unit testing (Exploring the other side as a tester)
Unit testing (Exploring the other side as a tester)
Abhijeet Vaikar
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
CodeOps Technologies LLP
 
An Introduction to unit testing
An Introduction to unit testingAn Introduction to unit testing
An Introduction to unit testingSteven Casey
 
Android testing
Android testingAndroid testing
Android testing
Igor Filippov
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
John Blum
 
Increasing Quality with DevOps
Increasing Quality with DevOpsIncreasing Quality with DevOps
Increasing Quality with DevOps
Coveros, Inc.
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
Facundo Farias
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015
Raghu Karnati
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUGlburdz
 
5-Ways-to-Revolutionize-Your-Software-Testing
5-Ways-to-Revolutionize-Your-Software-Testing5-Ways-to-Revolutionize-Your-Software-Testing
5-Ways-to-Revolutionize-Your-Software-TestingMary Clemons
 
Improving developer tester collaboration with microsoft visual studio 2010
Improving developer tester collaboration with microsoft visual studio 2010Improving developer tester collaboration with microsoft visual studio 2010
Improving developer tester collaboration with microsoft visual studio 2010
Mohamed Samy
 
.NET Fest 2019. Arnon Axelrod. Test automation for developers
.NET Fest 2019. Arnon Axelrod. Test automation for developers.NET Fest 2019. Arnon Axelrod. Test automation for developers
.NET Fest 2019. Arnon Axelrod. Test automation for developers
NETFest
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
Sergey Aganezov
 

Similar to Unit Testing Guidelines (20)

Unit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking SkeletonUnit Testing, TDD and the Walking Skeleton
Unit Testing, TDD and the Walking Skeleton
 
TDD Best Practices
TDD Best PracticesTDD Best Practices
TDD Best Practices
 
Unit testing, principles
Unit testing, principlesUnit testing, principles
Unit testing, principles
 
JavaScript Unit Testing
JavaScript Unit TestingJavaScript Unit Testing
JavaScript Unit Testing
 
Unit Testing and TDD 2017
Unit Testing and TDD 2017Unit Testing and TDD 2017
Unit Testing and TDD 2017
 
Test driven development(tdd)
Test driven development(tdd)Test driven development(tdd)
Test driven development(tdd)
 
Unit testing (Exploring the other side as a tester)
Unit testing (Exploring the other side as a tester)Unit testing (Exploring the other side as a tester)
Unit testing (Exploring the other side as a tester)
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
An Introduction to unit testing
An Introduction to unit testingAn Introduction to unit testing
An Introduction to unit testing
 
Android testing
Android testingAndroid testing
Android testing
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Increasing Quality with DevOps
Increasing Quality with DevOpsIncreasing Quality with DevOps
Increasing Quality with DevOps
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUG
 
5-Ways-to-Revolutionize-Your-Software-Testing
5-Ways-to-Revolutionize-Your-Software-Testing5-Ways-to-Revolutionize-Your-Software-Testing
5-Ways-to-Revolutionize-Your-Software-Testing
 
Improving developer tester collaboration with microsoft visual studio 2010
Improving developer tester collaboration with microsoft visual studio 2010Improving developer tester collaboration with microsoft visual studio 2010
Improving developer tester collaboration with microsoft visual studio 2010
 
Tdd dev session
Tdd dev sessionTdd dev session
Tdd dev session
 
.NET Fest 2019. Arnon Axelrod. Test automation for developers
.NET Fest 2019. Arnon Axelrod. Test automation for developers.NET Fest 2019. Arnon Axelrod. Test automation for developers
.NET Fest 2019. Arnon Axelrod. Test automation for developers
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 

Recently uploaded

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
Elena Simperl
 

Recently uploaded (20)

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 

Unit Testing Guidelines

  • 1. Unit Testing Guidelines Why, What and How... @jhooks | 2010 | joelhooks.com
  • 2. Why? It’s such a pain. there is never enough time! @jhooks | 2010 | joelhooks.com
  • 3. Sanity. Developers want a productive environment where things work as expected. Unit test can help create this environment at the code level. @jhooks | 2010 | joelhooks.com
  • 4. Protect your work. We work hard on the functionality that we add to the application. Unit tests serve as a guard against accidental “harm” of code. @jhooks | 2010 | joelhooks.com
  • 5. Developer documentation. Well written unit test provide excellent documentation for other developers. Unit tests describe how a piece of logical code should work in a way that English language docs often can’t. @jhooks | 2010 | joelhooks.com
  • 6. Collective ownership. Code that is protected can be worked on by anybody with greater assurance that nothing will be accidentally broken. @jhooks | 2010 | joelhooks.com
  • 7. Fearless refactoring. Code can be constantly improved upon with less fear of accidental breakage. Unit tests verify that changes don’t break the existing logic. @jhooks | 2010 | joelhooks.com
  • 8. What should be tested? Models Service classes Commands Utility classes any other logical code @jhooks | 2010 | joelhooks.com
  • 9. When to write tests... Before you write the code? After you write the code? @jhooks | 2010 | joelhooks.com
  • 10. Test Driven Development 10 Ways to Improve Your Code - Neal Ford @jhooks | 2010 | joelhooks.com
  • 11. Less fear. Writing unit tests firsts lets you focus on the functionality you are adding. Write the test. Write the code. Tests pass. Done. @jhooks | 2010 | joelhooks.com
  • 12. Ensure test coverage. Tests written before production code ensures that the production code is tested. Tests are not an afterthought. @jhooks | 2010 | joelhooks.com
  • 13. Reduces tedium of testing. Wait... What?! Writing tests before the production code eliminates the need for a massive testing effort after the code is written. @jhooks | 2010 | joelhooks.com
  • 14. Guarantees testable code. Testing first ensures that the production code can be tested. Testing after often results in the discovery that the code isn’t testable without refactoring. Refactoring that isn’t protected by tests. @jhooks | 2010 | joelhooks.com
  • 15. TDD is not a guarantee. Like most practices, TDD is no guarantee of quality or success in development. It is a tool. @jhooks | 2010 | joelhooks.com
  • 16. So when should I test? Test driven development is not required. Try it out. It can be painful to start, but once you get a rhythm going the benefits are very real. @jhooks | 2010 | joelhooks.com
  • 17. What is a good unit test? automated repeatable run by anybody future use fast single push easy @jhooks | 2010 | joelhooks.com
  • 18. Unit tests are by developers for developers. Quality over quantity please. @jhooks | 2010 | joelhooks.com
  • 19. Trustworthy Developers will run and use tests they trust. A trustworthy test is free of bugs and does what it says it does. @jhooks | 2010 | joelhooks.com
  • 20. Tests are written to last. Most tests are not meant to be temporary. They change for very specific reasons Bugs in production code Bugs in the test API updates in the production code Test is no longer valid or is not needed To eliminate duplication @jhooks | 2010 | joelhooks.com
  • 21. There is no logic in the test. Logic in a unit tests makes the test harder to read and understand. There is more likely to be bugs in the test. It can also make the test harder to name. There should be no switch, if, or else statements. There should be no for each, for, or while statements. The test is a series of method calls with no control flow. @jhooks | 2010 | joelhooks.com
  • 22. Only one thing is tested. A unit test is testing a single behavior. Testing multiple things makes a test hard to understand. Assert only one thing. Should be easy to name (you don’t need an and in the name). When it fails, it is clear what actually failed. @jhooks | 2010 | joelhooks.com
  • 23. Maintainable Unmaintainable tests are ignored and are often simply removed from the suite. Unmaintainable tests cannot be trusted. @jhooks | 2010 | joelhooks.com
  • 24. Test the API Unit tests are written against the public contract of the unit being tested. We shouldn’t be trying to test private methods. Private and protected methods can affect the outcome of public methods. Does it make sense to make a private method public? Test the results of the public API that uses private methods Is the private method pure utility? Would it makes sense as a static method of a utility class? @jhooks | 2010 | joelhooks.com
  • 25. Avoid duplication (DRY) Avoiding the duplication of code in unit tests is as, if not more, important than it is with production code. Create helper methods like factories to assist in setup of common items Use setup methods for setup of items common to all test methods in the case Setup should be as short, simple, and as easy to read as possible @jhooks | 2010 | joelhooks.com
  • 26. Tests should be isolated. Don’t try to use Parsley, configure and access remote services, or otherwise try to simulate the broader application in a unit test. Are test methods constrained to a linear order of execution? Is the test calling other test methods? Do tests share global state? Test behaviors, not workflows. If shared state can’t be avoid, be sure to reset it in the teardown. @jhooks | 2010 | joelhooks.com
  • 27. Avoid multiple asserts. Unit tests are testing specific single behaviors. It seems like more work because results might be related, but the results should be verified independently. Give each assertion its own test Give each test a meaningful name This makes failures easy to understand and fix @jhooks | 2010 | joelhooks.com
  • 28. Avoid over-specification. Tests shouldn’t make assumptions about the implementation of behavior, instead they should focus on the results of the behavior. Does the test specify purely internal behavior of the unit? Is the test using complicated mock objects when simple stubs would be enough? Does the test assume specific results when it isn’t required? @jhooks | 2010 | joelhooks.com
  • 29. Readable Code in tests is easy to understand quickly. What is being tested is recognizable instantly without deciphering or translation. Readable tests are more trustworthy and maintainable. @jhooks | 2010 | joelhooks.com
  • 30. Standard test names. If all tests are named in the same pattern they will be easy to read.. methodUnderTest_descriptionOfState_expectedBehavior() @jhooks | 2010 | joelhooks.com
  • 31. Good variable names. As with all code, good variable names can help greatly in making the code readable. Avoid abbreviations Use static constants instead of hardcoded values @jhooks | 2010 | joelhooks.com
  • 32. Consistent test structure. Setup -> Action -> Assert [Test] public function doSomeWork_workWasDone_isTrue() { //setup var aDependency:ISomeDependency = new SomeDependency(); //execute behavior aDependency.doSomeWork(); //verify expected state is valid assertThat(allTestsNeedThis.workWasDone, isTrue()); } @jhooks | 2010 | joelhooks.com