Behavior Driven Development with JUnit 5. Part 5

The fifth part of our article on Behavior Driven Development with JUnit 5. Happy reading.

We’ll now create a new Java class in the test/java folder, in the com.luxoft.bddjunit5.airport package. This class will be named PassengerPolicy and, at first, will contain the test skeleton. The execution of such a test follows the scenarios described in the passenger_policy.feature file. For example, when executing the step

Given there is an economy flight

the program will execute the method annotated with

@Given(“^there is an economy flight$”)

public class PassengerPolicy {

@Given(“^there is an economy flight$”) #1

public void there_is_an_economy_flight() throws Throwable { #2

// Write code here that turns the phrase above into concrete actions #2

throw new PendingException(); #2

} #2

@When(“^we have a regular passenger$”) #3

public void we_have_a_regular_passenger() throws Throwable { #4

// Write code here that turns the phrase above into concrete actions #4

throw new PendingException(); #4

} #4

@Then(“^you can add and remove him from an economy flight$”) #5

public void you_can_add_and_remove_him_from_an_economy_flight() #6

throws Throwable { #6

// Write code here that turns the phrase above into concrete actions #6

throw new PendingException(); #6

} #6

[…]

}

In this listing:

  • The Cucumber plugin generates a method annotated with @Given(“^there is an economy flight$”), meaning this method is executed when the step Given there is an economy flight from the scenario is executed #1.
  • The plugin generates a method stub to be implemented with the code addressing the step Given there is an economy flight from the scenario #2.
  • The plugin generates a method annotated with @When(“^we have a regular passenger$”), meaning this method is executed when the step When we have a regular passenger from the scenario is executed #3.
  • The plugin generates a method stub to be implemented with the code addressing the step When we have a regular passenger from the scenario #4.
  • The plugin generates a method annotated with @Then(“^you can add and remove him from an economy flight$”), meaning this method is executed when the step. Then you can add and remove him from an economy flight from the scenario is executed #5.
  • The plugin generates a method stub to be implemented with the code addressing the step Then you can add and remove him from an economy flight from the scenario #6.
  • The rest of the methods are implemented in a similar way; we have covered the Given, When, and Then steps of one scenario.

We follow the business logic of each step that has been defined and translates it into the tests — the steps of the scenarios that need to be verified.

public class PassengerPolicy {

private Flight economyFlight; #1

private Passenger mike; #1

[…]

@Given(“^there is an economy flight$”) #2

public void there_is_an_economy_flight() throws Throwable { #2

economyFlight = new EconomyFlight(“1”); #3

}

@When(“^we have a regular passenger$”) #4

public void we_have_a_regular_passenger() throws Throwable { #4

mike = new Passenger(“Mike”, false); #5

}

@Then(“^you can add and remove him from an economy flight$”) #6

public void you_can_add_and_remove_him_from_an_economy_flight() #6

throws Throwable {

assertAll(“Verify all conditions for a regular passenger #7

and an economy flight”, #7

() -> assertEquals(“1”, economyFlight.getId()), #7

() -> assertEquals(true, economyFlight.addPassenger(mike)), #7

() -> assertEquals(1, #7

economyFlight.getPassengersSet().size()), #7

() ->

assertTrue(economyFlight.getPassengersSet().contains(mike)), #7

() -> assertEquals(true, economyFlight.removePassenger(mike)), #7

() -> assertEquals(0, economyFlight.getPassengersSet().size()) #7

);

}

[…]

}

In this listing:

  • We declare the instance variables for the test, including economyFlight and mike as a Passenger #1.
  • We write the method corresponding to the Given there is an economy flight business logic step #2 by initializing economyFlight #3.
  • We write the method corresponding to the When we have a regular passenger business logic step #4 by initializing the regular passenger mike #5.
  • We write the method corresponding to the Then you can add and remove him from an economy flight business logic step #6 by checking all the conditions using the assertAll JUnit 5 method, which can now be read fluently #7.
  • The rest of the methods are implemented in a similar way; we have covered the Given, When, and Then steps of one scenario.

Interested in JUnit? Check out our trainings.

Catalin Tudose
Java and Web Technologies Expert

Originally published at https://www.luxoft-training.com.