Spring Boot Cucumber Component Test is a powerful way to validate your REST endpoints using behavior-driven development (BDD). In this post, we’ll walk through testing a /api/customers endpoint using Cucumber with real examples and setup.
🧱 Controller Setup for Spring Boot Cucumber Component Test
Here’s the CustomerController
class in Spring Boot, which exposes the /api/customers
endpoint to get all customers.
@RestController
@RequestMapping("/api")
public class CustomerController {
@GetMapping("/customers")
public List<Map<String, String>> getAllCustomers() {
return List.of(
Map.of("id", "1", "name", "Alice"),
Map.of("id", "2", "name", "Bob")
);
}
}
This controller is simple — it just returns a list of customers when the /customers
endpoint is hit.
🧪 Dependencies for Spring Boot Cucumber Component Test
To get Cucumber working with Spring Boot, we need to add a few dependencies to the pom.xml
file. Here are the necessary dependencies that will allow us to use Cucumber for behavior-driven tests.
Add the following to your pom.xml
:
<dependencies>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.12.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-spring</artifactId>
<version>7.12.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>7.12.1</version>
<scope>test</scope>
</dependency>
</dependencies>
🧩 Step Definitions for Spring Boot Cucumber Component Test
This is where we define the steps for our Cucumber test. These steps will interact with the CustomerController
and verify that the API responds as expected.
package com.codingboot.componenttest;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.ResponseEntity;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CustomerControllerSteps {
private TestRestTemplate restTemplate = new TestRestTemplate();
private ResponseEntity<String> response;
@LocalServerPort
private int port;
@Given("the customer service is running")
public void service_is_running() {
<em>// Spring Boot test context auto-starts</em>
}
@When("I call the GET endpoint {string}")
public void i_call_get_endpoint(String endpoint) {
response = restTemplate.getForEntity("http://localhost:" + port + "/api/" + endpoint, String.class);
}
@Then("I should receive a 200 OK response")
public void should_receive_200_response() {
assertEquals(200, response.getStatusCodeValue());
}
}
🧪Spring Boot Cucumber Context Configuration for Component Test
This context class hooks Spring Boot and Cucumber together. It ensures the Spring Boot application runs in the background during tests.
@RunWith(Cucumber.class)
@CucumberOptions(
features = "src/test/resources/features",
glue = "com.codingboot.componenttest",
plugin = {"pretty", "summary"}
)
@CucumberContextConfiguration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CucumberSpringContext {
<em>// Empty class just to hook Spring Boot and Cucumber</em>
}
📁 Sample Feature File: src/test/resources/features/customer.feature
Here’s the Gherkin feature file, where we define the test scenario for the /customers
endpoint.
Feature: Customer API
Scenario: Get all customers
Given the customer service is running
When I call the GET endpoint "customers"
Then I should receive a 200 OK response
✅ Test Output
Once you run the test, you should see output like this in your console:
Scenario: Get all customers # src/test/resources/features/customer.feature:3
Given the customer service is running # com.codingboot.componenttest.CustomerControllerSteps.service_is_running()
2025-05-03T14:26:22.642+05:30 INFO 40724 --- [o-auto-1-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-05-03T14:26:22.643+05:30 INFO 40724 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-05-03T14:26:22.644+05:30 INFO 40724 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
When I call the GET endpoint "/customers" # com.codingboot.componenttest.CustomerControllerSteps.i_call_get_endpoint(java.lang.String)
Then I should receive a 200 OK response # com.codingboot.componenttest.CustomerControllerSteps.should_receive_200_response()
1 Scenarios (1 passed)
3 Steps (3 passed)
0m2.890s
This output confirms that the test passed successfully, showing that the /api/customers
endpoint works as expected.
✅ Final Thoughts on Spring Boot Cucumber Component Test
This simple test verifies that the GET /api/customers
endpoint is available and responds with a 200 OK
status.
Leave a Reply to zidane Cancel reply