使用 MockitoJUnitRunner 运行单元测试时如何在 JSON 响应中指定日期格式

拉维·阿斯塔纳

我有一个 Spring Boot 应用程序,它使用 Swagger 2.0 从 Swagger API 定义生成 API 和模型对象。

我正在使用MockitoJUnitRunner运行一些单元测试

其中一个 API 返回一个包含日期字段的对象。

@JsonProperty("departureDate")
private LocalDate departureDate = null;

我在尝试在单元测试中获取 JSON 响应中的预期日期格式时遇到了一些问题。
我的测试看起来像这样。

    @RunWith(MockitoJUnitRunner.class)
    public class TourApiControllerStandaloneTest {
        //mock declarations
        ...
        private JacksonTester<TourHeader> jsonTourHeader;
        // controller under test
        private TourApiController tourApiController;
        private TourleaderMockData tourleaderMockData;
        ...
        @Before
        public void setup() {

            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.registerModule(new LocalDateModule()); //LocalDateModule formats the date in yyyy-mm-dd format

            tourApiController = new TourApiController(objectMapper, 
                            httpServletRequestMock, tourServiceMock);

            JacksonTester.initFields(this, objectMapper);

            mockMvc = MockMvcBuilders.standaloneSetup(tourApiController)
                        .setControllerAdvice(new GlobalExceptionHandler())
                        .build();

            tourleaderMockData = new TourleaderMockData();
        }

        @Test
        public void getTourHeaderWhenExists() throws Exception {
            ...
            // given 
            given(tourServiceMock.getTourHeader(tourNumber))
                .willReturn(tourleaderMockData.getMockTourHeaderRecord(tourNumber));

            // when
            MockHttpServletResponse response = mockMvc.perform(
                    get("/tour/" + tourNumber + "/header").accept(MediaType.ALL))
                    .andReturn().getResponse();

            // then
            assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value()); 
            //  *************** THIS ASSERTION IS FAILING ****************
            assertThat(response.getContentAsString()).isEqualTo(
jsonTourHeader.write(tourleaderMockData.getMockTourHeaderRecord(tourNumber)).getJson()
            );
        }
    }

来自 API 调用的 JSON 响应中返回的日期格式与来自模拟标头对象的序列化 JSON 不匹配。这就是日期在实际和预期响应中的显示方式。

** 实际 **
{ ...,"departureDate": [2018,12,1] , ...}
** 预期 **
{...,"departureDate": "2018-12-01" , .. .}

相同的断言有效,即当我使用SpringRunner时,日期格式按预期出现,如下所示。

@RunWith(SpringRunner.class)
@WebMvcTest(TourApiController.class)

当我使用MockitoJUnitRunner运行测试时,有人可以建议我可以做些什么来获得预期的日期格式谢谢。

拉维·阿斯塔纳

好的,我从 stackoverflow 上的另一个线程得到了答案https://stackoverflow.com/a/35323312/5519519

所以基本上我需要创建一个实例MappingJackson2HttpMessageConverter并将我的对象映射器设置到这个实例中。

然后在设置mockMvc的时候传递这个消息转换器。

MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new
                                MappingJackson2HttpMessageConverter();
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);

        mockMvc = MockMvcBuilders.standaloneSetup(tourApiController)
                    .setControllerAdvice(new GlobalExceptionHandler())
                    .setMessageConverters(mappingJackson2HttpMessageConverter)
                    .build(); 

这解决了问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在单元测试中使用JSON发送请求

使用pandas.to_csv时如何指定日期格式?

如何在两种不同的文件格式上运行单元测试?

使用@Configuration时运行单元测试时出现NoSuchBeanDefinitionException

使用MockitoJUnitRunner运行测试无法通过验证断言

如何在iOS 7.1中使用NSURLSession对HTTP请求和响应进行单元测试?

如何在read_csv中指定日期时间格式

如何在Xcode 6.1.1中使用Google Test运行本地C ++单元测试

使用CSS模块时如何在Jest单元测试中使用CSS选择器

使用MockitoJUnitRunner测试时为空服务

如何在create table命令中指定日期格式

如何在pytest单元测试中使用PropertyMock返回请求响应属性?

如何在单元测试期间使用Ext JS格式化方法格式化日期?

如何在使用熊猫日期时间时指定日期?

如何在容器内使用Coverlet运行单元测试覆盖率报告?

如何在肉房中指定日期格式?

如何在Visual Studio 2019中使用.NET 4.6.2版运行单元测试?

如何使用JSON日期格式?

使用Gradle任务运行单元测试时出现NoClassDefFoundError

使用MsTest运行单元测试时访问local.settings.json配置值

在MockitoJUnitRunner下运行测试时,DAO没有自动接线

Laravel中的单元测试JSON响应

如何在Oracle SQL上使用双表转换指定日期格式的给定日期

Spring 集成测试:在使用 MockitoJUnitRunner 时注入 @Value

如何使用 MockitoJUnitRunner 模拟 unmodifiableMap

如何在R中指定日期的x轴值

模拟 API 响应时如何在单元测试中使用 JSON 文件

使用 Alpha Vantage 插件时在 tidyquant (R) 中指定日期

在设置中指定日期格式时,Django Rest框架列表对象没有属性较低