Spring Boot and REST Assured is a great combination to build and test REST Web services. In this tutorial we will learn how to create a simple REST application and test it with REST Assured Framework.
REST Assured is a Java library that allows you to use a domain-specific language (DSL) for writing powerful, easy to maintain tests for RESTful APIs. In this tutorial I’ll show you how to set up and configure REST Assured with a Spring Boot Application.
Start by creating a new project which includes the web dependencies:
spring init -dweb demo-test
Now import the Maven project in your favourite IDE and add a model class named Customer that will be returned by a GET Request:
package com.example.demorest;
public class Customer {
private int id;
private String name;
public Customer(int id, String name) {
super();
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
All you need to build a Rest Service in Spring Boot is a RestController:
package com.example.testrest;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomerController {
@Autowired CustomerRepository repository;
@RequestMapping("/list")
public List<Customer> findAll() {
return repository.getData();
}
@RequestMapping("/one/{id}")
public Customer findOne(@PathVariable int id) {
return repository.getData().get(id);
}
}
As you can see, the CustomerController Endpoint has two methods:
- findAll: which returns all the Customer objects
- findOne: which returns a single Customer object
Both methods rely on the CustomerRepository Class which has a very simple implementation to produce a List of Customer objects:
package com.example.testrest;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
@Component
public class CustomerRepository {
List<Customer> customerList = new ArrayList<Customer>();
@PostConstruct
public void init() {
customerList.add(new Customer(1, "frank"));
customerList.add(new Customer(2, "john"));
}
public List<Customer> getData() {
return customerList;
}
}
And finally let’s code the Test class which uses REST Assured to verify both methods:
package com.example.testrest;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static io.restassured.RestAssured.get;
import static org.hamcrest.CoreMatchers.is;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DemoApplicationTests {
@Test
public void testCustomerList() {
get("http://localhost:8080/list").then().assertThat().statusCode(200).body("size()", is(2));
get("http://localhost:8080/one/0")
.then()
.assertThat()
.statusCode(200)
.body("name", Matchers.equalTo("frank"));
get("http://localhost:8080/one/1")
.then()
.assertThat()
.statusCode(200)
.body("name", Matchers.equalTo("john"));
}
}
In order to compile the application, you need the RestAssured dependency available in your pom.xml:
<?xml version="1.0" encoding="UTF-8"?><project>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.7</version>
<scope>test</scope>
</dependency>
</project>
Now compile and package the application with:
$ mvn clean install
Now you can run the application in any Spring Boot available way, f.e.
mvn spring-boot:run
Then, run the Test class as well, which should pass all Tests contained:

You can find the source code for the Spring Boot REST Assured tutorial here: https://github.com/fmarchioni/masterspringboot/tree/master/test/test-rest
Found the article helpful? if so please follow us on Socials