如何解决在 LocalDateTime 上使用 @RestClientTest 进行测试时,RestTemplate 的行为有所不同
在使用 @RestClientTest 注释的测试下调用时,我正在努力解决 RestTemplate 的行为方式。
@RunWith(SpringRunner.class)
@RestClientTest(PostalLegApiProvider.class)
@AutoConfigureWebClient(registerRestTemplate=true)
@Import({ PostalLegProperties.class,RestTemplateConfig.class,BuildProperties.class})
@ActiveProfiles("hom")
public class PostalLegApiProviderTest extends BaseTest {
private static final String PATH_REGISTRAR = "/requisicoes/registrar";
private PostalLegApiProvider provider;
@Autowired
private PostalLegProperties properties;
private MockRestServiceServer mockRest;
private Gson gson = new Gson();
@Autowired
@Qualifier("templateRest")
private RestTemplate restTemplateTest;
@Before
public void setUp() {
provider = new PostalLegApiProvider(restTemplateTest,properties);
mockRest = MockRestServiceServer.createServer(restTemplateTest);
}
@Test
public void deve_registrar_atendimento() {
// given
mockRest
.expect(requestTo(properties.getPostallegApiUrl() + PATH_REGISTRAR))
.andRespond(withSuccess(gson.toJson(getRequisicaoServicoPostalDto()),MediaType.APPLICATION_JSON_UTF8));
// when
RequisicaoServicoPostalDto rspDto = provider.registrarAtendimento(getRegistroAtendimentoParm());
// then
assertEquals(NUMERO_REQUISICAO,rspDto.getNumeroRequisicao());
}
在@Service 类中的某个地方,执行以下代码:
statusHttpEsperado(HttpStatus.OK).postForEntity(uri,request,Object.class);
在上面显示的测试上下文中,它返回一些类似:
200,{numeroRequisicao=123456,dataHoraRequisicao={date={year=2021,month=6,day=16},time={hour=12,minute=0,second=0,nano=0}}
当我调用相同的代码时不同:
statusHttpEsperado(HttpStatus.OK).postForEntity(uri,Object.class);
休息中
@RestController
@RequestMapping(value = "")
@Api(tags = "End-points disponibilizados para uso pela ECT- Empresa de Correios")
public class ServicoPostalController {
@Autowired
private ServicoPostalPort servicoPostalService;
它返回:
<200,{numeroRequisicao=1384830,dataHoraRequisicao=2021-06-17T19:07:18.85,
总结:为什么在测试中我将 LocalDateTime 设为
dataHoraRequisicao={date={year=2021,nano=0}}
代替
dataHoraRequisicao=2021-06-17T19:07:18.85
我已经尝试过像这样配置rest tamplate(在阅读了很多问题之后):
private void configuraJackson2Test(RestTemplate restTemplate) {
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(obterMapperTest());
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL));
messageConverters.add(converter);
restTemplate.setMessageConverters(messageConverters);
}
private ObjectMapper obterMapperTest() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
JavaTimeModule module = new JavaTimeModule();
objectMapper.registerModule(module);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
objectMapper.configure(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS,false);
return objectMapper;
}
但结果在测试中没有变化。
谢谢大家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。