junit-json-params
A Junit 5 library to provide annotations that load data from JSON Strings or files in parameterized tests.
Project Info
Installation
Apache Maven
<dependency>
<groupId>net.joshka</groupId>
<artifactId>junit-json-params</artifactId>
<version>5.6.2-r1</version>
</dependency>
Gradle
compile 'net.joshka:junit-json-params:5.6.2-r1'
Examples
@JsonSource
@JsonSource
allows you to specify argument lists as JSON strings.
import net.joshka.junit.json.params.JsonSource;
class JsonArgumentsProviderTest {
/**
* When passed <code>{"key":"value"}</code>, is executed a single time
* @param object the parsed JsonObject
*/
@ParameterizedTest
@JsonSource("{\"key\":\"value\"}")
@DisplayName("provides a single object")
void singleObject(JsonObject object) {
assertThat(object.getString("key")).isEqualTo("value");
}
/**
* When passed <code>[{"key":"value1"},{"key","value2"}]</code>, is
* executed once per element of the array
* @param object the parsed JsonObject array element
*/
@ParameterizedTest
@JsonSource("[{\"key\":\"value1\"},{\"key\":\"value2\"}]")
@DisplayName("provides an array of objects")
void arrayOfObjects(JsonObject object) {
assertThat(object.getString("key")).startsWith("value");
}
/**
* When passed <code>[1, 2]</code>, is executed once per array element
* @param number the parsed JsonNumber for each array element
*/
@ParameterizedTest
@JsonSource("[1,2]")
@DisplayName("provides an array of numbers")
void arrayOfNumbers(JsonNumber number) {
assertThat(number.intValue()).isGreaterThan(0);
}
/**
* When passed <code>["value1","value2"]</code>, is executed once per array
* element
* @param string the parsed JsonString for each array element
*/
@ParameterizedTest
@JsonSource("[\"value1\",\"value2\"]")
@DisplayName("provides an array of strings")
void arrayOfStrings(JsonString string) {
assertThat(string.getString()).startsWith("value");
}
/**
* When passed <code>{'key':'value'}</code>, is executed a single time.
* This simplifies writing inline JSON strings
* @param object the parsed JsonObject
*/
@ParameterizedTest
@JsonSource("{'key':'value'}")
@DisplayName("handles simplified json")
void simplifiedJson(JsonObject object) {
assertThat(object.getString("key")).isEqualTo("value");
}
}
@JsonFileSource
@JsonFileSource
lets you use JSON files from the classpath. It supports single objects and arrays of objects and JSON primitives (numbers and strings).
See JsonFileArgumentsProviderTest
import net.joshka.junit.json.params.JsonFileSource;
class JsonFileArgumentsProviderTest {
/**
* When passed <code>{"key":"value"}</code>, is executed a single time
* @param object the parsed JsonObject
*/
@ParameterizedTest
@JsonFileSource(resources = "/single-object.json")
@DisplayName("provides a single object")
void singleObject(JsonObject object) {
assertThat(object.getString("key")).isEqualTo("value");
}
/**
* When passed <code>[{"key":"value1"},{"key","value2"}]</code>, is
* executed once per element of the array
* @param object the parsed JsonObject array element
*/
@ParameterizedTest
@JsonFileSource(resources = "/array-of-objects.json")
@DisplayName("provides an array of objects")
void arrayOfObjects(JsonObject object) {
assertThat(object.getString("key")).startsWith("value");
}
/**
* When passed <code>[1, 2]</code>, is executed once per array element
* @param number the parsed JsonNumber for each array element
*/
@ParameterizedTest
@JsonFileSource(resources = "/array-of-numbers.json")
@DisplayName("provides an array of numbers")
void arrayOfNumbers(JsonNumber number) {
assertThat(number.intValue()).isGreaterThan(0);
}
/**
* When passed <code>["value1","value2"]</code>, is executed once per array
* element
* @param string the parsed JsonString for each array element
*/
@ParameterizedTest
@JsonFileSource(resources = "/array-of-strings.json")
@DisplayName("provides an array of strings")
void arrayOfStrings(JsonString string) {
assertThat(string.getString()).startsWith("value");
}
}
License
Copyright 2019 Joshua McKinney
Code is under the Apache License 2.0