By
using data tables, we can represent the data easily while writing scenarios.
Cucumber generates below skelton code.
Let
me explain with an example.
Suppose
in your organization, you had automated vending robot that deliver coffee, Tea,
Coke, Juice to the employees in the early morning and wish them.
How are you going to
model above scenario?
Without
data tables, we can model above scenario like below.
VendingMachineDelivery.feature
Feature: Vending robot should deliver and wish Employees Vending machine should deliver coffee, Chocklet, Coke, Juice to the employees and wish them. Scenario: Delivering and wising employees Given a vending robot When time is 9AM Then to the employee with preference "Coffee", deliver "Coffee" to employee and wish him with message "A Special Coffee for you" And to the employee with preference "Coke", deliver "Coke" to employee and wish him with message "Enjoy your coke" And to the employee with preference "Juice", deliver "Juice" to employee and wish him with message "Morning Healthy Juice" And to the employee with preference "Chocklet", deliver "Chocklet" to employee and wish him with message "Good Morning"
Cucumber generates below skelton code.
@Given("^a vending robot$") public void a_vending_robot() throws Exception { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @When("^time is (\\d+)AM$") public void time_is_AM(int arg1) throws Exception { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Then("^to the employee with preference \"([^\"]*)\", deliver \"([^\"]*)\" to employee and wish him with message \"([^\"]*)\"$") public void to_the_employee_with_preference_deliver_to_employee_and_wish_him_with_message(String arg1, String arg2, String arg3) throws Exception { // Write code here that turns the phrase above into concrete actions throw new PendingException(); }
Observation
Scenario:
Delivering and wising employees
Given a vending robot
When time is 9AM
Then
to the employee with preference "Coffee", deliver "Coffee"
to employee and wish him with message "A Special Coffee for you"
And
to the employee with preference "Coke", deliver "Coke" to
employee and wish him with message "Enjoy your coke"
And
to the employee with preference "Juice", deliver "Juice" to
employee and wish him with message "Morning Healthy Juice"
And
to the employee with preference "Chocklet", deliver
"Chocklet" to employee and wish him with message "Good
Morning"
As
you observe the scenario, Then, And steps are similar and there is so much
repetitive stuff. We can avoid this repetitive stuff using data tables.
We
can model above scenario using data tables like below.
VendingMachineDelivery.feature
Feature: Vending robot should deliver and wish Employees Vending machine should deliver coffee, Chocklet, Coke, Juice to the employees and wish them. Scenario: Delivering and wising employees Given a vending robot When time is 9AM Then delivier to the employee based on their preferences. |Employee Preference |Deliver |Wish Message | |Coffee |Coffee |A Special Coffee for you | |Coke |Coke |Enjoy your coke | |Juice |Juice |Morning Healthy Juice | |Chocklet |Chocklet |Good Morning |
Cucumber
generates below skelton.
@Given("^a vending robot$") public void a_vending_robot() throws Exception { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @When("^time is (\\d+)AM$") public void time_is_AM(int arg1) throws Exception { // Write code here that turns the phrase above into concrete actions throw new PendingException(); } @Then("^delivier to the employee based on their preferences\\.$") public void delivier_to_the_employee_based_on_their_preferences(DataTable arg1) throws Exception { // Write code here that turns the phrase above into concrete actions // For automatic transformation, change DataTable to one of // List<YourType>, List<List<E>>, List<Map<K,V>> or Map<K,V>. // E,K,V must be a scalar (String, Integer, Date, enum etc) throw new PendingException(); }
Let’s
print DataTable and see the result.
VendingMachineTest.java
package com.sample.test; import java.util.List; import cucumber.api.DataTable; import cucumber.api.java.en.*; public class VendingMachineTest { @Given("^a vending robot$") public void a_vending_robot() throws Exception { System.out.println("Vending Robot initialized"); } @When("^time is (\\d+)AM$") public void time_is_AM(int arg1) throws Exception { System.out.println("Time is set to " + arg1); } @Then("^delivier to the employee based on their preferences\\.$") public void delivier_to_the_employee_based_on_their_preferences(DataTable arg1) throws Exception { List<List<String>> input = arg1.asLists(String.class); for(List<String> row : input){ for(String column : row){ System.out.print(column + ","); } System.out.println(); } } }
TestRun.java
package com.sample.main; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions(monochrome = true, features = "src/test/java/com/sample/features", glue = "com.sample.test", plugin = { "pretty" }) public class TestRun { }
When
you ran above application, you can able to see below output.
Feature: Vending robot should deliver and wish Employees Vending machine should deliver coffee, Chocklet, Coke, Juice to the employees and wish them. Scenario: Delivering and wising employees # src/test/java/com/sample/features/VendingMachineDelivery.feature:5 Vending Robot initialized Given a vending robot # VendingMachineTest.a_vending_robot() Time is set to 9 When time is 9AM # VendingMachineTest.time_is_AM(int) Employee Preference,Deliver,Wish Message, Coffee,Coffee,A Special Coffee for you, Coke,Coke,Enjoy your coke, Juice,Juice,Morning Healthy Juice, Chocklet,Chocklet,Good Morning, Then delivier to the employee based on their preferences. # VendingMachineTest.delivier_to_the_employee_based_on_their_preferences(DataTable) 1 Scenarios (1 passed) 3 Steps (3 passed) 0m0.253s
As
you observe the output, data table is printed liked below.
Employee Preference,Deliver,Wish Message, Coffee,Coffee,A Special Coffee for you, Coke,Coke,Enjoy your coke, Juice,Juice,Morning Healthy Juice, Chocklet,Chocklet,Good Morning,
No comments:
Post a Comment