Skip to content

joshka/junit-json-params

Repository files navigation

junit-json-params

A Junit 5 library to provide annotations that load data from JSON Strings or files in parameterized tests.

Library status

Caution

I haven't actively written any Java in about 2 years, so this is in the barely maintained bucket Please feel free to fork this it and release under a different namespace. I'm happy to slap a link to a maintained fork on this repo to point at the new code, but I don't have the inclination to maintain it myself.

Project Info

Maven Central Version Javadocs GitHub License
GitHub Actions Workflow Status Sonar Quality Gate Sonar Coverage

Installation

Apache Maven

<dependencies> <dependency> <groupId>net.joshka</groupId> <artifactId>junit-json-params</artifactId> <version>5.10.2-r0</version> </dependency> <dependency> <groupId>org.eclipse.parsson</groupId> <artifactId>parsson</artifactId> <version>1.1.1</version> </dependency> </dependencies>

Gradle

testImplementation 'net.joshka:junit-json-params:5.10.2-r0' testImplementation 'org.eclipse.parsson:parsson:1.1.1'

Examples

@JsonSource

@JsonSource allows you to specify argument lists as JSON strings.

See JsonArgumentsProviderTest

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()).isPositive(); } /**  * 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()).isPositive(); } /**  * 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-2024 Joshua McKinney

Code is under the Apache License 2.0

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages