SlideShare une entreprise Scribd logo
1  sur  45
Acceptance Testing   with Fitnesse   Alessandro Marchetto Fondazione Bruno Kessler - IRST
Outline ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Business Logic GUI Web UI Persistence  Layer Jemmy/Abbot/JFCUnit/… HttpUnit/Canoo/Selenium Junit/SQLUnit/XMLUnit FIT/Fitnesse ( High level ) Junit ( Low level ) Cactus Perfomance and  Load Testing JMeter/JUnitPerf Testing tools
[object Object],[object Object],Traditional Approaches for acceptance testing Disadvantages : expensive, error prone, not repeatable, … Disavantages: Tests are brittle, i.e., have to be re-captured if the GUI changes.  “ Avoid acceptance testing only in final stage: Too late to find bugs”
[object Object],[object Object],Table-based Approach for acceptance testing Pro:  help to clarify requirements, used in System testing, … Cons:  expensive, error prone, … inputs output
What is Fit? ,[object Object],[object Object],[object Object],[object Object]
Using Fit ,[object Object],[object Object],[object Object],[object Object],[object Object]
To work with Fit ,[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],Fit table
Fixture ,[object Object],[object Object],[object Object]
Test Runner ,[object Object],“ red for failures  and  green for passed tests ” 75 5 7 26 38 Wigan 100  expected ------------------- 93  actual 2 1 35 38 Dummy 93 2 1 35 38 Chelsea 54 16 2 20 38 Aston Villa 83 5 2 31 38 Arsenal rating() lost drawn won played team name sample.VerifyRating
The Fit picture   User Story Fit Table Fixture Customer/ Analyst (i, o) System i o’ Developer o  ≠  o’ Test Runner Output Table O = expected output O’ = actual output
Core Fixture ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Fit Tools ,[object Object],[object Object],[object Object],[object Object],[object Object]
What is a Wiki? ,[object Object],[object Object],[object Object],[object Object],[object Object],Wikipedia … TestDrivenDevelopment ?
Eclipse ,[object Object],[object Object],[object Object],[object Object],[object Object],IDE = “Integrated development environment” ,[object Object],[object Object],[object Object],[object Object]
What is FitNesse? ,[object Object],[object Object],[object Object],[object Object],[object Object]
How to use FitNesse? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],“ expected 170, actual 190” How to use Fitnesse without Eclipse?   http ://fitnesse.org/FitNesse.UserGuide.DownloadingAndInstallingFitNesse   http://www.bandxi.com/fitnesse/download.html
http://fitnesse.org/FitNesse.UserGuide.EditingFitNessePages
Sub Wikis and Test suites  ,[object Object],[object Object],[object Object],… Wiki parent SubWiki 1 SubWiki 2 http://fitnesse.org/FitNesse.UserGuide.SubWiki
Wiki Sub-wiki Remember to initially create the first page
Core Fixture  in Fitnesse ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],http://fitnesse.org/FitNesse.UserGuide.FixtureGallery
[object Object],ColumnFixture - The second row lists column names for input and output “()” - All following rows list combinations of input arguments and expected values of output arguments.  The fixture class should extend  fit.ColumnFixture  and declare public fields and methods to  match the second table row.  import  fit.ColumnFixture extends  ColumnFixture import fit.ColumnFixture; public class ColumnFixtureTest  extends ColumnFixture {   public String firstPart;   public String secondPart;   private int length;    public String together(){   length=firstPart.length()+secondPart.length();   return firstPart+ ", "+secondPart; } public int totalLength(){   return length; } } !|info.fitnesse.fixturegallery.ColumnFixtureTest| |firstPart|secondPart|together()|totalLength()| |Hello|World|Hello, World|10| |Houston|We Have a Problem|Houston, We Have a Problem|24|
[object Object],ActionFixture All rows after the first begin with a command cell, followed by command arguments in the remaining cells. Possible commands are:  start  — it starts the test by taking the class name for the actual fixture to automate  check  — it executes a method and verifies its value.  press  — it executes a void   method without testing anything.  enter  — it executes a method and passes an argument to it.  import  fit.ActionFixture; extends  ActionFixture public class ActionFixtureTest extends fit.Fixture{ private String first, second, both; public void firstPart(String s){  first=s; } public void secondPart(String s){  second=s; } public void join(){  both=first+ ", "+second; } public String together(){  return both; } } !|ActionFixture| |start|ActionFixtureTest| |enter|firstPart|Hello| |enter|secondPart|World| |press|join| |check|together|Hello, World|
[object Object],RowFixture Override: - getTargetClass:  returns the Type or Class   object representing the type of objects in the array.  - query : returns the actual array of objects to be verified.  - The second row describes the properties or methods that you want to verify - All rows after that describe expected objects in the array   import  fit.RowFixture extends  RowFixture import info.fitnesse.fixturegallery.domain.Player; import fit.RowFixture; public class RowFixtureTest extends RowFixture{ public Class getTargetClass() {   return Player.class; } public Object[] query() throws Exception  {  return Player.players.toArray(); } } !|RowFixtureTest| |name|post code| |John Smith|SW4 66Z| |Michael Jordan|NE1 8AT|
[object Object],RowEntryFixture ,[object Object],[object Object],[object Object],- The first row contains the field that we want to enter - All rows after the first contain the data to be added import  fitnesse.fixtures.RowEntryFixture; extends  RowEntryFixture  public class RowEntryExample extends RowEntryFixture{ public int v; public void enterRow() throws Exception{ if (v == 0)   throw new Exception("Oh, no! Zero!"); } }   |fitnesse.fixtures.RowEntryExample| |v| |1| |0|
An example: Sum Calculator public class  MySum  {   public static int  sum (int a, int b)  { return a+b;  }  }  public class  MyFixture  extends   ColumnFixture  {   int a,b; public int  sum ()  {   return MySum.sum(a,b); }  }  A full demo:  http://softeng.polito.it/courses/tutorial/FitnesseInEclipse.html
An example: Football team Website ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
user story (change requirement) set of acceptance tests excel file with sample data
Test1: Table  “verify the rating is calculated properly”   ,[object Object],[object Object],[object Object],[object Object],[object Object],“column fixture”
Test1: Fixture  “verify the rating is calculated properly” ,[object Object],[object Object],[object Object],public class  VerifyRating  extends  ColumnFixture  { public String teamName;  public int played;  public int won;  public int drawn;  public int lost;  public long  rating()  { Team team = new Team(teamName, played,won,drawn,lost); return team.rating;  }  }
[object Object],package  sport.businessObjects; public class  Team  {   public String name; public int played; public int won; public int drawn; public int lost; public int rating; public  Team(String name, int ply, int won, int drawn, int lst)  {  super();  this.name = name;  this.played = played;  this.won = won;  this.drawn = drawn;  this.lost = lost;  calculateRating();  } private void  calculateRating()  {  float value = ((10000f*(won*3+drawn))/(3*played))/100;  rating = Math.round(value);  }  }
Test1: Running “verify the rating is calculated properly” ,[object Object],[object Object],[object Object],[object Object],[object Object],passed failed exception Launch the test runner … 75 5 7 26 38 Wigan 100  expected ------------------- 93  actual 2 1 35 38 Dummy 93 2 1 35 38 Chelsea 54 16 2 20 38 Aston Villa 83 5 2 31 38 Arsenal rating() lost drawn won played team name sport.fixtures.VerifyRating
Test 2  “Search for top two teams using the screen and validate the search results” ,[object Object],[object Object],[object Object],[object Object],[object Object],“ Top 2 teams based on rating”
[object Object],[object Object],[object Object],[object Object],Test 2: Table 1  “Search for top two teams using the screen and validate the search results” “action fixture”
Test 2: Fixture “1”  “Search for top two teams using the screen and validate the search results” public class  VerifyWorkflow  extends  Fixture { private int topN;  private Collection<Team> results; public void numberOfTopTeams(int n) {  topN = n;  }   public void search()  {  results = Populate.teams.getTopTeams(topN);  } public int numberOfResults() {  return results.size();  } }
Test 2: Running “1”  “Search for top two teams using the screen and validate the search results” ,[object Object],[object Object],[object Object],[object Object],2 number of results check   search press   2 number of top teams enter   sport.fixtures.VerifyWorkflow   start   fit.ActionFixture
Test 2: Fit table “2”  “validate the search results” ,[object Object],[object Object],[object Object],It could be expressed by means of its  fields or methods 83 5 2 31 38 Arsenal 93 2 1 35 38 Chelsea rating lost drawn won played name sport.fixtures.VerifyResults   “row fixture” Name of the row fixture Expected collection of objects
Test 2: Fixture “2”   “validate the search results” public class  VerifyResults  extends  RowFixture  {   @Override public  Object[] query() throws Exception {  return Populate.teams.getTopTeams(2).toArray();  } @Override public  Class getTargetClass()  {  return Team.class;  }  }
Test 2: Running “2”   “validate the search results” ,[object Object],[object Object],[object Object],[object Object],[object Object],83 5 2 31 38 Arsenal 93 2 1 35 38 Chelsea rating lost drawn won played name sample.VerifyResults
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],…  supporting fixture
Testing non-functional requirements: “timed action fixture” ,[object Object],[object Object],[object Object],10 sec.
Summary   fixture   ,[object Object],[object Object],[object Object]
Conclusions ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
References ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Contenu connexe

Tendances

Automation Framework/QTP Framework
Automation Framework/QTP FrameworkAutomation Framework/QTP Framework
Automation Framework/QTP Framework
HeyDay Software Solutions
 
QTP&UFT Automation Framework
QTP&UFT Automation FrameworkQTP&UFT Automation Framework
QTP&UFT Automation Framework
Yu Tao Zhang
 
Final Automation Testing
Final Automation TestingFinal Automation Testing
Final Automation Testing
priya_trivedi
 

Tendances (20)

The Fitnesse Fix
The Fitnesse FixThe Fitnesse Fix
The Fitnesse Fix
 
Automation Framework/QTP Framework
Automation Framework/QTP FrameworkAutomation Framework/QTP Framework
Automation Framework/QTP Framework
 
Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation Framework
 
#1 unit testing
#1 unit testing#1 unit testing
#1 unit testing
 
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFTRFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
RFT Tutorial 4 How Do We Record A Script Using Rational Functional Tester - RFT
 
QTP&UFT Automation Framework
QTP&UFT Automation FrameworkQTP&UFT Automation Framework
QTP&UFT Automation Framework
 
Writing Test Cases in Agile
Writing Test Cases in AgileWriting Test Cases in Agile
Writing Test Cases in Agile
 
Automation using ibm rft
Automation using ibm rftAutomation using ibm rft
Automation using ibm rft
 
Full Testing Experience - Visual Studio and TFS 2010
 Full Testing Experience - Visual Studio and TFS 2010 Full Testing Experience - Visual Studio and TFS 2010
Full Testing Experience - Visual Studio and TFS 2010
 
Keyword Driven Automation
Keyword Driven AutomationKeyword Driven Automation
Keyword Driven Automation
 
Final Automation Testing
Final Automation TestingFinal Automation Testing
Final Automation Testing
 
Load Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | EdurekaLoad Testing Using JMeter Tutorial | Edureka
Load Testing Using JMeter Tutorial | Edureka
 
Uft Basics
Uft BasicsUft Basics
Uft Basics
 
Rft courseware
Rft coursewareRft courseware
Rft courseware
 
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
RFT Tutorial - 9 How To Create A Properties Verification Point In Rft For Tes...
 
Test automation principles, terminologies and implementations
Test automation principles, terminologies and implementationsTest automation principles, terminologies and implementations
Test automation principles, terminologies and implementations
 
Fundamentals of unit testing
Fundamentals of unit testingFundamentals of unit testing
Fundamentals of unit testing
 
Introduction to Gauge
Introduction to GaugeIntroduction to Gauge
Introduction to Gauge
 
What is Integration Testing? | Edureka
What is Integration Testing? | EdurekaWhat is Integration Testing? | Edureka
What is Integration Testing? | Edureka
 
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 201...
 

En vedette

Gray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 pptGray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors
 
Cánh hoa duyên kiếp
Cánh hoa duyên kiếpCánh hoa duyên kiếp
Cánh hoa duyên kiếp
steppe91
 
โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4
somjaibio003
 
ภาคผนวก
ภาคผนวกภาคผนวก
ภาคผนวก
somjaibio003
 

En vedette (20)

Apache Hive
Apache HiveApache Hive
Apache Hive
 
Gray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 pptGray Stone Advisors NBAA Leadership 2012 ppt
Gray Stone Advisors NBAA Leadership 2012 ppt
 
ALEJE.IT z Positive Power
ALEJE.IT z Positive PowerALEJE.IT z Positive Power
ALEJE.IT z Positive Power
 
บทที่ 1
บทที่ 1บทที่ 1
บทที่ 1
 
Cánh hoa duyên kiếp
Cánh hoa duyên kiếpCánh hoa duyên kiếp
Cánh hoa duyên kiếp
 
Lks pengukuran
Lks pengukuranLks pengukuran
Lks pengukuran
 
บทที่ 2
บทที่ 2บทที่ 2
บทที่ 2
 
The human factor
The human factorThe human factor
The human factor
 
Rafael Moucka na konferencji InternetASAP
Rafael Moucka na konferencji InternetASAPRafael Moucka na konferencji InternetASAP
Rafael Moucka na konferencji InternetASAP
 
Rafael Moucka na konferencji PARP
Rafael Moucka na konferencji PARPRafael Moucka na konferencji PARP
Rafael Moucka na konferencji PARP
 
Company Presentation
Company PresentationCompany Presentation
Company Presentation
 
โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4โครงงานไวรัสคอมพิวเตอร์ 5.4
โครงงานไวรัสคอมพิวเตอร์ 5.4
 
Direct Red 254, Pigment Dispersions
Direct Red 254, Pigment DispersionsDirect Red 254, Pigment Dispersions
Direct Red 254, Pigment Dispersions
 
Rafael Moucka wśród Mentorów E-biznesu
Rafael Moucka wśród Mentorów E-biznesuRafael Moucka wśród Mentorów E-biznesu
Rafael Moucka wśród Mentorów E-biznesu
 
Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach Jak być interaktywnym? Pozytywnie o agencjach
Jak być interaktywnym? Pozytywnie o agencjach
 
บทที่ 5
บทที่ 5บทที่ 5
บทที่ 5
 
Basketball
BasketballBasketball
Basketball
 
Sensible defence
Sensible defenceSensible defence
Sensible defence
 
RWD: przyszłością m.commerce?
RWD: przyszłością m.commerce?RWD: przyszłością m.commerce?
RWD: przyszłością m.commerce?
 
ภาคผนวก
ภาคผนวกภาคผนวก
ภาคผนวก
 

Similaire à 2 fitnesse

J unit presentation
J unit presentationJ unit presentation
J unit presentation
Priya Sharma
 
Acceptance Testing With Selenium
Acceptance Testing With SeleniumAcceptance Testing With Selenium
Acceptance Testing With Selenium
elliando dias
 
Introduction To Work Item Customisation
Introduction To Work Item CustomisationIntroduction To Work Item Customisation
Introduction To Work Item Customisation
wbarthol
 
Getting started with_testcomplete
Getting started with_testcompleteGetting started with_testcomplete
Getting started with_testcomplete
ankit.das
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricks
Tsimafei Avilin
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
Tricode (part of Dept)
 

Similaire à 2 fitnesse (20)

Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in Java
 
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
AUTOCODECOVERGEN: PROTOTYPE OF DATA DRIVEN UNIT TEST GENRATION TOOL THAT GUAR...
 
Getting started with test complete 7
Getting started with test complete 7Getting started with test complete 7
Getting started with test complete 7
 
J unit presentation
J unit presentationJ unit presentation
J unit presentation
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
Testers Desk Presentation
Testers Desk PresentationTesters Desk Presentation
Testers Desk Presentation
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
Acceptance Testing With Selenium
Acceptance Testing With SeleniumAcceptance Testing With Selenium
Acceptance Testing With Selenium
 
RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG RPG Program for Unit Testing RPG
RPG Program for Unit Testing RPG
 
Automation tips
Automation tipsAutomation tips
Automation tips
 
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And Refactoring
 
Introduction To Work Item Customisation
Introduction To Work Item CustomisationIntroduction To Work Item Customisation
Introduction To Work Item Customisation
 
JUnit Goodness
JUnit GoodnessJUnit Goodness
JUnit Goodness
 
QuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStageQuerySurge integration with ETL / DataStage
QuerySurge integration with ETL / DataStage
 
Getting started with_testcomplete
Getting started with_testcompleteGetting started with_testcomplete
Getting started with_testcomplete
 
UI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricksUI Automation_White_CodedUI common problems and tricks
UI Automation_White_CodedUI common problems and tricks
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
 
Qtp 92 Tutorial769
Qtp 92 Tutorial769Qtp 92 Tutorial769
Qtp 92 Tutorial769
 

Dernier

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+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@
 

Dernier (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
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
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - 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
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
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...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
+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...
 

2 fitnesse

  • 1. Acceptance Testing with Fitnesse Alessandro Marchetto Fondazione Bruno Kessler - IRST
  • 2.
  • 3. Business Logic GUI Web UI Persistence Layer Jemmy/Abbot/JFCUnit/… HttpUnit/Canoo/Selenium Junit/SQLUnit/XMLUnit FIT/Fitnesse ( High level ) Junit ( Low level ) Cactus Perfomance and Load Testing JMeter/JUnitPerf Testing tools
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12. The Fit picture User Story Fit Table Fixture Customer/ Analyst (i, o) System i o’ Developer o ≠ o’ Test Runner Output Table O = expected output O’ = actual output
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 20.
  • 21. Wiki Sub-wiki Remember to initially create the first page
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. An example: Sum Calculator public class MySum { public static int sum (int a, int b) { return a+b; } } public class MyFixture extends ColumnFixture { int a,b; public int sum () { return MySum.sum(a,b); } } A full demo: http://softeng.polito.it/courses/tutorial/FitnesseInEclipse.html
  • 28.
  • 29. user story (change requirement) set of acceptance tests excel file with sample data
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. Test 2: Fixture “1” “Search for top two teams using the screen and validate the search results” public class VerifyWorkflow extends Fixture { private int topN; private Collection<Team> results; public void numberOfTopTeams(int n) { topN = n; } public void search() { results = Populate.teams.getTopTeams(topN); } public int numberOfResults() { return results.size(); } }
  • 37.
  • 38.
  • 39. Test 2: Fixture “2” “validate the search results” public class VerifyResults extends RowFixture { @Override public Object[] query() throws Exception { return Populate.teams.getTopTeams(2).toArray(); } @Override public Class getTargetClass() { return Team.class; } }
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.