Home » Core Java » junit » JUnit Example For Rest Web Services

About Vinod Kumar Kashyap

Vinod is Sun Certified and love to work in Java and related technologies. Having more than 10 years of experience, he had developed software's including technologies like Java, Hibernate, Struts, Spring, HTML 5, jQuery, CSS, Web Services, MongoDB, AngularJS. He is also a JUG Leader of Chandigarh Java User Group.

JUnit Example For Rest Web Services

In this example, we shall show users how they can test a REST service with the help of the JUnit. We will use the Jersey and REST assured for this example.

1. Introduction

In the previous examples written by me, we have seen lot of things and scenarios which we can test with the help of JUnit. If you are looking at this example, then there is a brighter chance that you have already know something about the JUnit.

Want to be a JUnit Master ?

Subscribe to our newsletter and download the JUnit Programming Cookbook right now!

In order to help you master unit testing with JUnit, we have compiled a kick-ass guide with all the major JUnit features and use cases! Besides studying them online you may download the eBook in PDF format!

 

In this example, we will carry a different scenario i.e. we will test our REST API with the help of JUnit. But JUnit alone cannot do the trick. We need to use some of the libraries outside which are built on top of the JUnit to help test. We will also use the Jersey for creating a REST project.

In our case we will be using the REST-assured library. This library is very powerful and enriched with tools to test our scenario. We will not cover all the scenarios in this example, as here we will try to understand the basic usage of the REST-assured.

2. Technologies Used

  • Java: Language to write code
  • JUnit 4.12: Testing framework
  • Eclipse: IDE for writing code
  • Jersey 2.25.1: Framework to write the REST services
  • REST assured 3.0.3: Framework to test the REST web servcies

3. What is Jersey

As per the Jersey website,

To simplify development of RESTful Web services and their clients in Java, a standard and portable JAX-RS API has been designed. Jersey RESTful Web Services framework is open source, production quality, framework for developing RESTful Web Services in Java that provides support for JAX-RS APIs and serves as a JAX-RS (JSR 311 & JSR 339) Reference Implementation.

In simple words, we will use Jersey to create a REST project and then we will test those API using REST-assured in our example.

4. What is REST assured

REST-assured is a library to test the REST API’s. It provides various methods like get(), body(), when(), then() to test the various scenarios. We will see below in our example how we can use these to test.

5. Project Setup

Tip
You may skip project creation and jump directly to the beginning of the example below. But we recommend to follow all steps.

Since we are using the Jersey, we will create Maven project with the help of the eclipse. First of all, we create a Maven project. Click File -> New -> Maven project, you will see the below screen. We do not have to do anything on the screen so, we will click on Next button.

JUnit REST Web Setup 1

Figure 1: JUnit REST Web Setup 1

On this screen, we need to add the Archetype. On this we will click on Add Archetype… button.

JUnit REST Web Setup 2

Figure 2: JUnit REST Web Setup 2

We will presented with the following screen. Simply add the details as mentioned and click on OK button.
Archetype Group Id: org.glassfish.jersey.archetypes
Archetype Artifact Id: jersey-quickstart-webapp
Archetype Version: 2.26-b04

JUnit REST Web Setup 3

Figure 3: JUnit REST Web Setup 3

After clicking on the OK button you will see the added archetype in the window as shown below.

JUnit REST Web Setup 4

Figure 4: JUnit REST Web Setup 4

Select it and click on Next button. On this screen fill in all details as shown and click on the Finish button.

JUnit REST Web Setup 5

Figure 5: JUnit REST Web Setup 5

We are ready with our sample REST project. But for this example, we will make some necessary changes.

6. JUnit Example for REST Web Services

Let’s start editing our project that is built using the steps above. First of open pom.xml file and add these lines to it.

pom.xml

<!-- https://mvnrepository.com/artifact/io.rest-assured/rest-assured -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.3</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

Here we are actually, adding dependency foe JUnit and REST-assured.
Also we need to un-comment the below line from pom.xml file. This will actually help in testing the json output

<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>

6.1 Java Classes

We will create a model class that will help us to test our example. This is a simple class with 4 variables and their getters and setters.

Employee.java

package com.javacodegeeks.junitrestweb;

public class Employee {

    private Long id;
    private String firstName;
    private String lastName;
    private String designation;

    public Employee() {
    }

    // getters and setters
}

Now we will create a REST service for the Employee class.

EmployeeResource.java

package com.javacodegeeks.junitrestweb;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("employee")
public class EmployeeResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("/{id}")
    public Employee getEmployee(@PathParam("id") final Long id) {
        final Employee emp = new Employee();
        emp.setId(id);
        emp.setFirstName("Vinod");
        emp.setLastName("Kashyap");
        emp.setDesignation("CEO");

        return emp;
    }
}

In this class we are creating a method that will be called as an API from outside.
Line 9: we are using the @Path annotation of the Jersey, which specifies that the path name will be used to access the API. In our case it is employee.
Line 12: specifies that we are using the GET protocol of REST.
Line 13: specifies that this method will produces the output as a json. We can specify any type like text, html, xml.
Line 14: specifies that we will use this path to access this method. {id} defines that we need to pass the id so together with the service then url becomes /employee/12.

6.2 JUnit Test Class

Finally, we need to create a test class that will test the methods of above class.

EmployeeRestTest.java

package com.javacodegeeks.junitrestweb;

import static io.restassured.RestAssured.get;
import static org.hamcrest.CoreMatchers.equalTo;

import org.junit.BeforeClass;
import org.junit.Test;

import io.restassured.RestAssured;

public class EmployeeRestTest {
    @BeforeClass
    public static void init() {
        RestAssured.baseURI = "http://localhost";
        RestAssured.port = 8081;
    }

    @Test
    public void testUserFetchesSuccess() {
        get("/junitrestweb/webapi/employee/12")
        .then()
        .body("id", equalTo(12))
        .body("firstName", equalTo("Vinod"))
        .body("lastName", equalTo("Kashyap"))
        .body("designation", equalTo("CEO"));
    }
}

Let’s analyze our class and see what is going here. As we are using the REST-assured for testing this example, we have used its API here in this class.

  • Line 12: @BeforeClass annotation is used to do all our initialization before our test cases start to execute. This method will execute only once but before executing all test cases.
  • Line 14-15: In these lines we are using the properties for our API. Instead of putting the same URL in all test cases we simply initialize them using the RestAssured variables. There are other 3 properties that we can use.

    RestAssured.basePath = “/junitrestweb”;
    RestAssured.authentication = basic(“username”, “password”); // username and password authentication
    RestAssured.rootPath = “x.y.z”;

  • Line 20: Here we are using the get() method of the REST-assured library. It simply gets the URL.
  • Line 21: So when get() is executed, we then use then() method to specify that whenever we gets something what we have to do next with that thing.
  • Line 22-25: These lines basically tests the body of the json that is generated against the values specified here.

It covers the main example of the REST web app. But before running this example we need to change one more thing that is auto generated by the wizard we have used above. In web.xml file we need to edit one line before proceeding.

web.xml

<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.javacodegeeks.junitrestweb</param-value>
</init-param>

We have edit the line 3. Simply write the package name used in our example.

6.3 Running the example

Before we start testing, we need to run our web project on the web server. In our case, we are using the tomcat for testing. Simply deploy the application on the tomcat and we are ready to test our example.

After running, right click on EmployeeRestTest.java class and Run As -> JUnit Test. Our example will succeed with the following output shown in the eclipse JUnit window.

JUnit REST Web Output

Figure 6: JUnit REST Web Output

7. Conclusion

In this example we have seen how we can create a simple REST project and then test it using the library known as REST-assured. We have learned the basic usage of the Jersey framework which helps in creating the REST web services.

References for the libraries used in this example fare are given below. Users are advised to visit the references for more detailed knowledge of the libraries.

8. Download the Eclipse Project

This is an JUnit example for testing the REST web services.

Download
You can download the full source code of this example here: JUnitRestWebExample.zip

9. References

(No Ratings Yet)
5 Comments Views Tweet it!

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

Receive Java & Developer job alerts in your Area

 

5
Leave a Reply

avatar
5 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
Jawmart AgawusandyaphanikumarHenk de programuurashhad khan Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
ashhad khan
Guest
ashhad khan

nice piece of info regarding RESTassured testing of web service.

Henk de programuur
Guest
Henk de programuur

org.glassfish.jersey.media
jersey-media-moxy

when i add this dependency my pom asks for a version which version should be used.

phanikumar
Guest
phanikumar

Hi,
I need to add a header variable along to the requesting api to get the response.
can any one help on that sort of test cases writing.

sandya
Guest
sandya

Hi, when i tried to run the testcase i am getting error as connection refused.please help me

Jawmart Agawu
Guest
Jawmart Agawu

trying to use aforesaid io.rest-assured I receive exception thrown by Maven when it attempts to run test:
java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET
at io.restassured.config.EncoderConfig.(EncoderConfig.java:61)
at io.restassured.config.RestAssuredConfig.(RestAssuredConfig.java:41)
at io.restassured.RestAssured.(RestAssured.java:420)

what to do ?