Spring Boot: автоматически настроенные JSON тесты
Чтобы проверить, что сериализация и десериализация этого объекта JSON работает должным образом, вы можете использовать аннотацию @JsonTest. @JsonTest автоматически настраивает доступный поддерживаемый преобразователь JSON, который может быть одной из следующих библиотек:
- Jackson ObjectMapper, любые @JsonComponent компоненты и любые Jackson модули
- Gson
- Jsonb
Если вам нужно настроить элементы автоконфигурации, вы можете использовать аннотацию @AutoConfigureJsonTesters.
Spring Boot включает помощников на основе AssertJ, которые работают с библиотеками JSONAssert и JsonPath, чтобы проверить, что JSON отображается должным образом. Классы JacksonTester, GsonTester, JsonbTester и BasicJsonTester могут использоваться для Jackson, Gson, Jsonb и Strings соответственно. Любые вспомогательные поля в тестовом классе могут быть @Autowired при использовании @JsonTest. В следующем примере показан тестовый класс для Jackson:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.*;
import org.springframework.boot.test.autoconfigure.json.*;
import org.springframework.boot.test.context.*;
import org.springframework.boot.test.json.*;
import static org.assertj.core.api.Assertions.*;
@JsonTest
class MyJsonTests {
@Autowired
private JacksonTester json;
@Test
void testSerialize() throws Exception {
VehicleDetails details = new VehicleDetails("Honda", "Civic");
// Утверждение против файла `.json` в том же пакете, что и тест
assertThat(this.json.write(details)).isEqualToJson("expected.json");
// Или использовать утверждения на основе пути JSON
assertThat(this.json.write(details)).hasJsonPathStringValue("@.make");
assertThat(this.json.write(details)).extractingJsonPathStringValue("@.make")
.isEqualTo("Honda");
}
@Test
void testDeserialize() throws Exception {
String content = "{\"make\":\"Ford\",\"model\":\"Focus\"}";
assertThat(this.json.parse(content))
.isEqualTo(new VehicleDetails("Ford", "Focus"));
assertThat(this.json.parseObject(content).getMake()).isEqualTo("Ford");
}
}
Вспомогательные классы JSON также можно использовать непосредственно в стандартных модульных тестах. Для этого вызовите метод initFields помощника в вашем методе @Before, если вы не используете @JsonTest.
Если вы используете помощники Spring Boot на основе AssertJ для подтверждения числового значения по заданному пути JSON, вы не сможете использовать isEqualTo в зависимости от типа. Вместо этого вы можете использовать AssertJ satisfies, чтобы утверждать, что значение соответствует данному условию. Например, в следующем примере утверждается, что фактическое число является значением с плавающей запятой, близким к 0,15 со смещением 0,01.
assertThat(json.write(message))
.extractingJsonPathNumberValue("@.test.numberValue")
.satisfies((number) -> assertThat(number.floatValue()).isCloseTo(0.15f, within(0.01f)));
Читайте также:
- Spring Boot: тестирование в фиктивной (mock) среде
- Spring Boot: тестирование, определение типа веб-приложения, определение конфигурации теста
- Spring Boot: тестирование, исключение тестовой конфигурации, использование аргументов приложения
Комментарии
Отправить комментарий