У меня есть класс, который настраивает JackMark ObjectMapper. Он добавляет некоторые пользовательские сериализаторы и десериализаторы для моих типов объектов следующим образом:
public class JsonMapperFactory {
public static ObjectMapper createObjectMapper() {
final SimpleModule module = new SimpleModule("customerSerializationModule", new Version(1, 0, 0, "static version"));
addCustomDeserializersTo(module);
addCustomSerializersTo(module);
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);
return objectMapper;
}
private static void addCustomSerializersTo(final SimpleModule module) {
module.addSerializer(DateTime.class, new DateTimeSerializer());
}
private static void addCustomDeserializersTo(final SimpleModule objectMapper) {
objectMapper.addDeserializer(DateTime.class, new DateTimeDeserializer());
}
}
Я тестировал свои сериализаторы клиентов в своих собственных тестовых классах, поэтому в своем тестировании этого класса JsonMapperFactory
я пытаюсь просто проверить, что созданный ObjectMapper имеет ожидаемые сериализаторы (или десериализаторы). Этого можно достичь путем инспектирования ObjectMapper, но у него нет никаких механизмов для этого.
Кто-нибудь знает хороший способ проверить это?
Для десериализаторов у меня есть следующее:
private void assertThatObjectMapperUsesCorrectDeserializer(final Class<?> typeClazz, final Class<?> deserializerClazz) throws JsonMappingException {
final DeserializationConfig deserializationConfig = this.objectMapper.getDeserializationConfig();
final JsonDeserializer<Object> deserializer = this.objectMapper.getDeserializerProvider().findTypedValueDeserializer(deserializationConfig, javaTypeFor(typeClazz), null);
assertThat(deserializer, is(instanceOf(deserializerClazz)));
}
private JavaType javaTypeFor(final Class<?> clazz) {
return TypeFactory.type(clazz); //deprecated method :(
}
Что довольно многословно и использует устаревшие методы.
Мне еще предстоит найти способ сделать аналогичный тест для сериализаторов. Таким образом, я в настоящее время прибегал к сериализации объекта и проверял правильность его сериализации (по сути, дублирование теста serializer)
Любые идеи очень приветствуются.