资讯专栏INFORMATION COLUMN

Spring、Spring Boot和TestNG测试指南 - @JsonTest

Hegel_Gu / 1738人阅读

摘要:地址是提供的方便测试序列化反序列化的测试工具,在的文档中有一些介绍。例子简单例子源代码见使用通包下的文件测试结果是否正确或者使用基于的校验例子测试可以用来测试。这个例子里使用了自定义的测试代码例子使用事实上也可以配合一起使用。

Github地址

@JsonTest是Spring Boot提供的方便测试JSON序列化反序列化的测试工具,在Spring Boot的文档中有一些介绍。

需要注意的是@JsonTest需要Jackson的ObjectMapper,事实上如果你的Spring Boot项目添加了spring-web的Maven依赖,JacksonAutoConfiguration就会自动为你配置一个:

</>复制代码

  1. org.springframework.boot
  2. spring-boot-autoconfigure
  3. org.springframework
  4. spring-web

这里没有提供关于日期时间的例子,关于这个比较复杂,可以看我的另一篇文章:Spring Boot Jackson对于日期时间类型处理的例子。

例子1:简单例子

源代码见SimpleJsonTest:

</>复制代码

  1. @SpringBootTest(classes = SimpleJsonTest.class)
  2. @JsonTest
  3. public class SimpleJsonTest extends AbstractTestNGSpringContextTests {
  4. @Autowired
  5. private JacksonTester json;
  6. @Test
  7. public void testSerialize() throws Exception {
  8. Foo details = new Foo("Honda", 12);
  9. // 使用通包下的json文件测试结果是否正确
  10. assertThat(this.json.write(details)).isEqualToJson("expected.json");
  11. // 或者使用基于JSON path的校验
  12. assertThat(this.json.write(details)).hasJsonPathStringValue("@.name");
  13. assertThat(this.json.write(details)).extractingJsonPathStringValue("@.name").isEqualTo("Honda");
  14. assertThat(this.json.write(details)).hasJsonPathNumberValue("@.age");
  15. assertThat(this.json.write(details)).extractingJsonPathNumberValue("@.age").isEqualTo(12);
  16. }
  17. @Test
  18. public void testDeserialize() throws Exception {
  19. String content = "{"name":"Ford","age":13}";
  20. Foo actual = this.json.parseObject(content);
  21. assertThat(actual).isEqualTo(new Foo("Ford", 13));
  22. assertThat(actual.getName()).isEqualTo("Ford");
  23. assertThat(actual.getAge()).isEqualTo(13);
  24. }
  25. }
例子2: 测试@JsonComponent

@JsonTest可以用来测试@JsonComponent。

这个例子里使用了自定义的@JsonComponent FooJsonComponent:

</>复制代码

  1. @JsonComponent
  2. public class FooJsonComponent {
  3. public static class Serializer extends JsonSerializer {
  4. @Override
  5. public void serialize(Foo value, JsonGenerator gen, SerializerProvider serializers)
  6. throws IOException, JsonProcessingException {
  7. // ...
  8. }
  9. }
  10. public static class Deserializer extends JsonDeserializer {
  11. @Override
  12. public Foo deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
  13. // ...
  14. }
  15. }
  16. }

测试代码JsonComponentJsonTest:

</>复制代码

  1. @SpringBootTest(classes = { JsonComponentJacksonTest.class, FooJsonComponent.class })
  2. @JsonTest
  3. public class JsonComponentJacksonTest extends AbstractTestNGSpringContextTests {
  4. @Autowired
  5. private JacksonTester json;
  6. @Test
  7. public void testSerialize() throws Exception {
  8. Foo details = new Foo("Honda", 12);
  9. assertThat(this.json.write(details).getJson()).isEqualTo(""name=Honda,age=12"");
  10. }
  11. @Test
  12. public void testDeserialize() throws Exception {
  13. String content = ""name=Ford,age=13"";
  14. Foo actual = this.json.parseObject(content);
  15. assertThat(actual).isEqualTo(new Foo("Ford", 13));
  16. assertThat(actual.getName()).isEqualTo("Ford");
  17. assertThat(actual.getAge()).isEqualTo(13);
  18. }
  19. }
例子3: 使用@ContextConfiguration

事实上@JsonTest也可以配合@ContextConfiguration一起使用。

源代码见ThinJsonTest:

</>复制代码

  1. @JsonTest
  2. @ContextConfiguration(classes = JsonTest.class)
  3. public class ThinJsonTest extends AbstractTestNGSpringContextTests {
  4. @Autowired
  5. private JacksonTester json;
  6. @Test
  7. public void testSerialize() throws Exception {
  8. // ...
  9. }
  10. @Test
  11. public void testDeserialize() throws Exception {
  12. // ...
  13. }
  14. }
参考文档

Spring Framework Testing

Spring Boot Testing

@JsonTest

JsonComponent

JacksonAutoConfiguration

JacksonTester

GsonTester

BasicJsonTester

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70292.html

相关文章

  • SpringSpring BootTestNG测试指南 - 测试Spring MVC

    摘要:地址提供了,能够很方便的来测试。同时也提供了更进一步简化了测试需要的配置工作。本章节将分别举例说明在不使用和使用下如何对进行测试。例子测试的关键是使用对象,利用它我们能够在不需启动容器的情况下测试的行为。 Github地址 Spring Testing Framework提供了Spring MVC Test Framework,能够很方便的来测试Controller。同时Spring...

    andong777 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - @OverrideAutoConfi

    摘要:因为只有这样才能够在测试环境下发现生产环境的问题,也避免出现一些因为配置不同导致的奇怪问题。而方法则能够不改变原有配置不提供新的配置的情况下,就能够关闭。 Github地址 在Chapter 1: 基本用法 - 使用Spring Boot Testing工具里提到: 除了单元测试(不需要初始化ApplicationContext的测试)外,尽量将测试配置和生产配置保持一致。比如如果生产...

    elisa.yang 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 使用Spring Testing工具

    摘要:源代码见需要注意的是,如果是专供某个测试类使用的话,把它放到外部并不是一个好主意,因为它有可能会被扫描到,从而产生一些奇怪的问题。 Github地址 既然我们现在开发的是一个Spring项目,那么肯定会用到Spring Framework的各种特性,这些特性实在是太好用了,它能够大大提高我们的开发效率。那么自然而然,你会想在测试代码里也能够利用Spring Framework提供的特...

    Maxiye 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - 共享测试配置

    摘要:地址在使用工具中提到在测试代码之间尽量做到配置共用。本章将列举几种共享测试配置的方法我们可以将测试配置放在一个里,然后在测试或中引用它。也可以利用的及自定义机制,提供自己的用在测试配置上。 Github地址 在使用Spring Boot Testing工具中提到: 在测试代码之间尽量做到配置共用。...能够有效利用Spring TestContext Framework的缓存机制,Ap...

    CHENGKANG 评论0 收藏0
  • SpringSpring BootTestNG测试指南 - @TestPropertySourc

    摘要:地址可以用来覆盖掉来自于系统环境变量系统属性的属性。同时优先级高于。利用它我们可以很方便的在测试代码里微调模拟配置比如修改操作系统目录分隔符数据源等。源代码例子使用工具也可以和一起使用。源代码见参考文档 Github地址 @TestPropertySource可以用来覆盖掉来自于系统环境变量、Java系统属性、@PropertySource的属性。 同时@TestPropertySou...

    paney129 评论0 收藏0

发表评论

0条评论

Hegel_Gu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<