Не удалось преобразовать offsetDateTime в формат строки ISO-8601 в модульном тесте Spring - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь протестировать свои контроллеры с помощью MockitoRunner и spring, но возвращаемый объект всегда преобразует OffsetDate в метку времени, а не в строковый формат ISO-8601. Я попытался настроить Jackson.tester, но «ошибка» все еще происходит.

@Mock
val mensagemRepository: MensagemRepository? = null

var mensagemService: MensagemService? = null

var mvc: MockMvc? = null

var mensagemController: MensagemController? = null

@Before
fun carregaService() {
    val objectMapper = ObjectMapper()
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
    JacksonTester.initFields(this, objectMapper)
    mensagemService = MensagemService(mensagemRepository!!)
    mensagemController = MensagemController(mensagemService!!)
    mvc = MockMvcBuilders.standaloneSetup(mensagemController).build()
}

@Test
fun searchPhrase() {
    val resposta = "[{\"dataProc\":\"2020-01-22T13:46:46.000000695\",\"phrase\":\"TESTE\",\"status\":\"0\",\"statusStr\":null,\"cpf\":\"11111111111\"}]"

    val retorno = LinkedList<Mensagem>()
    val mensagemId = MensagemId()
    mensagemId.date = LocalDateTime.of(2020, 1, 22, 13, 46, 46, 695)

    val mensagem = MensagemRegistrato()
    mensagem.mensagemRegistratoId = mensagemId
    mensagem.Seg = "teste"
    mensagem.SGR = "0"
    mensagem.STR = null
    mensagem.cpf = "teste"

    retorno.add(mensagem)

    BDDMockito.given(mensagemRepository!!.findByCpf("11111111111")).willReturn(retorno)

    val response: MockHttpServletResponse = mvc!!.perform(
            MockMvcRequestBuilders.get("/api/example-endpoint?cpf=11111111111")
                    .contentType("")
                    .accept(MediaType.APPLICATION_JSON)
    ).andReturn().response

    assertEquals(resposta, response.contentAsString)
    assertEquals(HttpStatus.OK.value(), response.status)

    println(response)
}

Возвращение:

{"dataProc":1579711606.000000695,"phrase":"TESTE FRASE SQL","status":"0","statusStr":null,"cpf":"11111111111"}

Я убежден, что это происходит из-за неправильной конфигурации Джексона , но я не могу понять, как это сделать. Кто-нибудь знает, как настроить возврат OffsetDateTime как ISO-8601, используя Mock Mvc?

1 Ответ

0 голосов
/ 02 марта 2020

Эта конфигурация должна работать. Вы должны зарегистрировать JavaTimeModule

 objectMapper.registerModule(new JavaTimeModule());
 mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...