SlideShare uma empresa Scribd logo
1 de 20
The FitNesse Fix
Getting the most out of Fitnesse



                         gojko@gojko.net
                               @gojkoadzic

              David.Evans@sqs-uk.com
                           @DavidEvans66

                Mike.Scott@sqs-uk.com
                               @MikeAScott
A good acceptance test is

 Focused on a single thing (rule, step..)
 Specification, not a script

 Self-explanatory

 Uses the domain language

 About business domain

  - Not about software design
 SMART
    Specific, Measurable, Achievable, Relevant, Time-bound
How - script

rate change date is 23/5
due date                 rate   amount
22/4                  5.40%      340.2
22/5                  5.40%      340.2
22/6                  4.90%      308.7

rate change date is 20/5
due date                 rate   amount
22/4                  5.40%      340.2
22/5                  5.40%      308.7
22/6                  4.90%      308.7
What - specification

due date   rate changed change reflected in period
22/5                 23/5                       no
22/5                 20/5                      yes
Often easier to spot gaps:

due date   rate changed change reflected in period
22/5                 23/5                       no
22/5                 20/5                      yes
22/5                 22/5                    ????
Another example of “how”
   Mike logs on
   Mike browses to the books page
   Mike adds “Perfect Software” to the cart
   Mike adds “Agile testing” to the cart
   Mike goes to check-out
   Mike gets offered free delivery


            what are we specifying here?
Further Fitnesse advice:
   Don’t let Fitnesse become just another test tool
   Use it as a communication medium
   Remember your stakeholders
       They would not read a test automation script
   Avoid overcomplicating test pages
       What would a newbie learn, browsing your pages?
   XXX rated tests
       Explanatory, exemplary and executable
Simplicity
   Hard to do ≠ hard to describe
       “...landing a man on the moon and returning him
        safely to earth”
   Separate test Setup from test Actions
       Preconditions are boring, actions are interesting
       “As our story begins...”
   Use a 3-part format to structure complex tests
       Given, When, Then
       Arrange, Act, Assert
       Precondition, Action, Postcondition
Common symptoms of problems
   Technical tests
      Reflect the way the code was written
      Use technical jargon/class names
      Favour reuse over clarity
Common symptoms of problems
   Long/complex tests
      Specify too much (how not what)
      Check for every possible case
          These tests are useful, but not as a specification
      copy/paste from other tests things that aren't really
      needed
   Break them up
   Distil the specification
Common symptoms of problems
   Lots of tests with minor differences in some
    values
        copy/paste?
        How, not what?
   Distil “what”, create a single test out of the
    whole group
       Let the test highlight the differences that matter
Now, let’s read some tests
Strategies for simplicity
   Use collapsible sections to hide distractions
      !**> Given a smoker Bob aged 50 with standard life policy
            Setup tables to create Bob’s life insurance policy etc. go here...
      **!
   Let the Fixture code deal with complexity
Interdependent tests
   Copy/paste?
      Common dependencies?
      Parts used to set up/clean up after related tests
   Extract common dependencies into test suites
   Push technical activities into fixtures
Tests that fail intermittently
      Unreliable
      Asynchronous processes?
      External dependencies?
      Problems in the implementation?
      Data dependency?
      Random values?
   Work out what's wrong and fix it
FitNesse Pages tell us “what”

     Fixtures handle “how”
As a rule of thumb:
   FitNesse pages should be relatively short
      Specification must be easy to understand
   Stuff should not repeat across pages
      Don't copy and paste, make specification clear and
      focused
   Fixtures should be very thin
      Just an adapter to your code
      Shouldn't contain logic
      Use them to script test workflow
Best practices to keep tests good:
   Keep in the same SCM as the code
   Keep them organised and easy to find
   Evolve the language consistently
   Clean up periodically
Simple Test Design Advice:
   Uncle Bob Martin (TDD rule #2)
       “Don’t write any more of a test than is needed to
        make it fail”
   Brian Marick:
       “Use no word unless it's clearly related to the
        intention of the test”
   Bach, Kaner, Pettichord:
       “Avoid complex logic in your test scripts...
        keep your tests linear”

Mais conteúdo relacionado

Mais procurados

Automated cceptance testing using Fitnesse & Selenium
Automated cceptance testing using Fitnesse & SeleniumAutomated cceptance testing using Fitnesse & Selenium
Automated cceptance testing using Fitnesse & Selenium
mayurairon
 
Engaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile ProjectsEngaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile Projects
Ravi Kumar
 

Mais procurados (20)

Automated cceptance testing using Fitnesse & Selenium
Automated cceptance testing using Fitnesse & SeleniumAutomated cceptance testing using Fitnesse & Selenium
Automated cceptance testing using Fitnesse & Selenium
 
2 fitnesse
2 fitnesse2 fitnesse
2 fitnesse
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Unit testing
Unit testing Unit testing
Unit testing
 
Qa process 2012
Qa process 2012Qa process 2012
Qa process 2012
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
Achieve Intelligent Test Execution: Strategies for Streamlining Regression Te...
Achieve Intelligent Test Execution: Strategies for Streamlining Regression Te...Achieve Intelligent Test Execution: Strategies for Streamlining Regression Te...
Achieve Intelligent Test Execution: Strategies for Streamlining Regression Te...
 
Agile test practices
Agile test practicesAgile test practices
Agile test practices
 
Continuous Delivery without Test Automation @STPCon, San Diego
Continuous Delivery without Test Automation @STPCon, San DiegoContinuous Delivery without Test Automation @STPCon, San Diego
Continuous Delivery without Test Automation @STPCon, San Diego
 
Engaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile ProjectsEngaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile Projects
 
QA Process Overview
QA Process OverviewQA Process Overview
QA Process Overview
 
Functional & Performance Test Automation with CI
Functional & Performance Test Automation with CI Functional & Performance Test Automation with CI
Functional & Performance Test Automation with CI
 
Test automation lesson
Test automation lessonTest automation lesson
Test automation lesson
 
Tdd dev session
Tdd dev sessionTdd dev session
Tdd dev session
 
Test automation engineer
Test automation engineerTest automation engineer
Test automation engineer
 
Bert Zuurke - A Lean And Mean Approach To Model-Based Testing - EuroSTAR 2010
Bert Zuurke - A Lean And Mean Approach To Model-Based Testing - EuroSTAR 2010Bert Zuurke - A Lean And Mean Approach To Model-Based Testing - EuroSTAR 2010
Bert Zuurke - A Lean And Mean Approach To Model-Based Testing - EuroSTAR 2010
 
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile wayContinuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
 
Lesson 4...Bug Life Cycle
Lesson 4...Bug Life CycleLesson 4...Bug Life Cycle
Lesson 4...Bug Life Cycle
 

Semelhante a The Fitnesse Fix

Semelhante a The Fitnesse Fix (20)

Specification by example and agile acceptance testing
Specification by example and agile acceptance testingSpecification by example and agile acceptance testing
Specification by example and agile acceptance testing
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
 
Not Your Grandfather's Requirements-Based Testing Webinar – Robin Goldsmith, ...
Not Your Grandfather's Requirements-Based Testing Webinar – Robin Goldsmith, ...Not Your Grandfather's Requirements-Based Testing Webinar – Robin Goldsmith, ...
Not Your Grandfather's Requirements-Based Testing Webinar – Robin Goldsmith, ...
 
Bridging the communication gap
Bridging the communication gapBridging the communication gap
Bridging the communication gap
 
Greythorn Whiteboard Interview Guide
Greythorn Whiteboard Interview GuideGreythorn Whiteboard Interview Guide
Greythorn Whiteboard Interview Guide
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Test Driven Development - Overview and Adoption
Test Driven Development - Overview and AdoptionTest Driven Development - Overview and Adoption
Test Driven Development - Overview and Adoption
 
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd   seven years afterIan Cooper webinar for DDD Iran: Kent beck style tdd   seven years after
Ian Cooper webinar for DDD Iran: Kent beck style tdd seven years after
 
Fundamentals of testing
Fundamentals of testingFundamentals of testing
Fundamentals of testing
 
How To Review The Sprints Efficiently
How To Review The Sprints EfficientlyHow To Review The Sprints Efficiently
How To Review The Sprints Efficiently
 
How to successfully grow a code review culture
How to successfullygrow a code review cultureHow to successfullygrow a code review culture
How to successfully grow a code review culture
 
TDD with BizTalk
TDD with BizTalkTDD with BizTalk
TDD with BizTalk
 
Pin the tail on the metric v00 75 min version
Pin the tail on the metric v00 75 min versionPin the tail on the metric v00 75 min version
Pin the tail on the metric v00 75 min version
 
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
 
Journey of atdd
Journey of atddJourney of atdd
Journey of atdd
 
Agile testing
Agile testingAgile testing
Agile testing
 
How to successfully grow a code review culture
How to successfully grow a code review cultureHow to successfully grow a code review culture
How to successfully grow a code review culture
 
Agile Eng Practices Agilesparks
Agile Eng Practices AgilesparksAgile Eng Practices Agilesparks
Agile Eng Practices Agilesparks
 
Code review best practice
Code review best practiceCode review best practice
Code review best practice
 
The Essentials Of Test Driven Development
The Essentials Of Test Driven Development The Essentials Of Test Driven Development
The Essentials Of Test Driven Development
 

Mais de Skills Matter

Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
Skills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
Skills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
Skills Matter
 

Mais de Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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
 
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
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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...
 
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
 
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
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

The Fitnesse Fix

  • 1. The FitNesse Fix Getting the most out of Fitnesse gojko@gojko.net @gojkoadzic David.Evans@sqs-uk.com @DavidEvans66 Mike.Scott@sqs-uk.com @MikeAScott
  • 2. A good acceptance test is  Focused on a single thing (rule, step..)  Specification, not a script  Self-explanatory  Uses the domain language  About business domain - Not about software design  SMART Specific, Measurable, Achievable, Relevant, Time-bound
  • 3.
  • 4. How - script rate change date is 23/5 due date rate amount 22/4 5.40% 340.2 22/5 5.40% 340.2 22/6 4.90% 308.7 rate change date is 20/5 due date rate amount 22/4 5.40% 340.2 22/5 5.40% 308.7 22/6 4.90% 308.7
  • 5. What - specification due date rate changed change reflected in period 22/5 23/5 no 22/5 20/5 yes
  • 6. Often easier to spot gaps: due date rate changed change reflected in period 22/5 23/5 no 22/5 20/5 yes 22/5 22/5 ????
  • 7. Another example of “how”  Mike logs on  Mike browses to the books page  Mike adds “Perfect Software” to the cart  Mike adds “Agile testing” to the cart  Mike goes to check-out  Mike gets offered free delivery what are we specifying here?
  • 8. Further Fitnesse advice:  Don’t let Fitnesse become just another test tool  Use it as a communication medium  Remember your stakeholders  They would not read a test automation script  Avoid overcomplicating test pages  What would a newbie learn, browsing your pages?  XXX rated tests  Explanatory, exemplary and executable
  • 9. Simplicity  Hard to do ≠ hard to describe  “...landing a man on the moon and returning him safely to earth”  Separate test Setup from test Actions  Preconditions are boring, actions are interesting  “As our story begins...”  Use a 3-part format to structure complex tests  Given, When, Then  Arrange, Act, Assert  Precondition, Action, Postcondition
  • 10. Common symptoms of problems  Technical tests Reflect the way the code was written Use technical jargon/class names Favour reuse over clarity
  • 11. Common symptoms of problems  Long/complex tests Specify too much (how not what) Check for every possible case  These tests are useful, but not as a specification copy/paste from other tests things that aren't really needed  Break them up  Distil the specification
  • 12. Common symptoms of problems  Lots of tests with minor differences in some values copy/paste? How, not what?  Distil “what”, create a single test out of the whole group  Let the test highlight the differences that matter
  • 13. Now, let’s read some tests
  • 14. Strategies for simplicity  Use collapsible sections to hide distractions !**> Given a smoker Bob aged 50 with standard life policy Setup tables to create Bob’s life insurance policy etc. go here... **!  Let the Fixture code deal with complexity
  • 15. Interdependent tests  Copy/paste? Common dependencies? Parts used to set up/clean up after related tests  Extract common dependencies into test suites  Push technical activities into fixtures
  • 16. Tests that fail intermittently Unreliable Asynchronous processes? External dependencies? Problems in the implementation? Data dependency? Random values?  Work out what's wrong and fix it
  • 17. FitNesse Pages tell us “what” Fixtures handle “how”
  • 18. As a rule of thumb:  FitNesse pages should be relatively short Specification must be easy to understand  Stuff should not repeat across pages Don't copy and paste, make specification clear and focused  Fixtures should be very thin Just an adapter to your code Shouldn't contain logic Use them to script test workflow
  • 19. Best practices to keep tests good:  Keep in the same SCM as the code  Keep them organised and easy to find  Evolve the language consistently  Clean up periodically
  • 20. Simple Test Design Advice:  Uncle Bob Martin (TDD rule #2)  “Don’t write any more of a test than is needed to make it fail”  Brian Marick:  “Use no word unless it's clearly related to the intention of the test”  Bach, Kaner, Pettichord:  “Avoid complex logic in your test scripts... keep your tests linear”