Test Data in JSON

Let’s store our test data (users) in test-users.json in the resource folder in JSON format.

Test data - resources/test-users.json

    "firstName": "John",
    "lastName": "Lennon",
    "email": "mail@john.lennon.com"
    "firstName": "Paul",
    "lastName": "McCartney",
    "email": "mail@paul.mccartney.com"
    "firstName": "Ringo",
    "lastName": "Starr",
    "email": "mail@ringo.starr.com"
    "firstName": "George",
    "lastName": "Harrison",
    "email": "mail@george.harrison.com"

TestNG + Spring Boot. Test Data in JSON

The goal is to be able to inject that test data into any TestNG test as a regular Spring Boot bean. See How to get started with TestNG and Spring Boot

Class User represents a model for test data in test-users.json

package io.lenar.examples.spring.model;

public class User {

    private String firstName;

    private String lastName;

    private String email;

    public User(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;

    public boolean equals(Object obj) {
        User user = (User) obj;
        return this.lastName.equals(user.getLastName()) 
                && this.firstName.equals(user.getFirstName())
                && this.email.equals(user.getEmail());

    // setters and getters

Spring Boot + TestNG. Test Data in JSON


Here we store the name of the file that contains our test data. See here how to get parameters from application.properties in Spring Boot


FileReader class contains method for reading content of the file

See here how to read file into String

package io.lenar.examples.spring.testdata;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

import org.apache.commons.io.IOUtils;

public class FileReader {

    public String getFileAsString(String fileName) {
        try {
            InputStream input = this.getClass().getResourceAsStream("/" + fileName);
            return IOUtils.toString(input, StandardCharsets.UTF_8);
        } catch (IOException e) {
            // TODO Do all that you need to do if couldn't read a file
            return null;


Test data as a Spring bean

TestData defines the Spring bean that can be injected where it’s needed. We need to inject our test data into TestNG tests. @Component annotation informs Spring Boot that TestData should be considered as a Spring Boot bean and that allows us to inject TestData into TestNG tests as we need or any other place in the project.

package io.lenar.examples.spring.testdata;

import java.util.Arrays;
import java.util.List;

import io.lenar.examples.spring.model.User;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.google.gson.Gson;

public class TestData extends FileReader {

    private String usersFile;

    public List<User> getUsers() {
        Gson gson = new Gson();
        return Arrays.asList(gson.fromJson(getFileAsString(usersFile), User[].class));


Inject test data with @Autowired Spring annotation into TestNG tests

Now finally we can write tests that use our test data saved in the test-users.json. All we need is to autowire TestData with @Autowire Spring annotation. Spring Boot will find, instantiate and inject TestData into TestNG tests.

package io.lenar.examples.spring;

import io.lenar.examples.spring.model.User;
import io.lenar.examples.spring.testdata.TestData;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;

@SpringBootTest(classes = TestNGWithSpringApplication.class)
public class InjectTestDataIntoTestsIT extends AbstractTestNGSpringContextTests {

    TestData testData;

    public void testUsersNumberTest() {
        Assert.assertEquals(testData.getUsers().size(), 4);

    public void isRingoInBeatlesTest() {
        User ringo = new User("Ringo", "Starr", "mail@ringo.starr.com");
        Assert.assertTrue(isDudeInBeatles(ringo), "That dude (Ringo) is not in The Beatles");

    public void isElvisInBeatlesTest() {
        User elvis = new User("Elvis", "Presley", "mail@elvis.presley.com");
        Assert.assertFalse(isDudeInBeatles(elvis), "That dude (Elvis) is in The Beatles");

    private boolean isDudeInBeatles(User dude) {
        return testData.getUsers().stream().anyMatch(artist -> artist.equals(dude));


You may also find these posts interesting: