如何为自定义Jackson序列化器编写JUnit-Test?

瑞士人

我想测试将我的java对象解析为json对象的序列化器。这是我的序列化器类:

public class CountryCodeSerializer extends JsonSerializer<CountryCode> {

    @Override
    public void serialize(CountryCode value, JsonGenerator generator, SerializerProvider provider)
            throws IOException, JsonProcessingException {

        if (value == null) {
            generator.writeString("{}");
        } else {
            generator.writeString(value.toString());
        }
    }

}

我的测试如下所示:

    @Before
        public void setUp() throws Exception {
            stringJson = new StringWriter();
            generator = new JsonFactory().createGenerator(stringJson);
            provider = new ObjectMapper().getSerializerProvider();
            countryCode = CountryCode.parse("us");
        }

        @Test
        public void parsingNullReturnsNull() throws Exception {
            assertThat(countryCodeSerializer.serialize(countryCode, generator, provider)).isEqualTo("{'countrycode':'us'}); //this doesn't work, since serialize() is void

//countryCodeSerializer.serialize(countryCode, generator, provider); //this throws an java.lang.NullPointerException
        }

那么如何测试我的序列化器?我尝试了类似问题的其他答案,但没有任何帮助。

我在其他案例中使用了这样的序列化器:

@JsonSerialize(using = CountryCodeSerializer.class)
    private CountryCode countryCode;
瑞士人

好的,谢谢您的回答。我现在以这种方式得到它,并且工作正常:

我稍微改变了序列化器:

public class CountryCodeSerializer extends JsonSerializer<CountryCode> {
       @Override
        public void serialize(CountryCode value, JsonGenerator generator, SerializerProvider provider)
                throws IOException, JsonProcessingException {

            if (null == value) {
                throw new IllegalArgumentException("CountryCode is null");
            } else {
                generator.writeString(value.toString());
            }
        }        
    }

这是我的两个测试:

public class CountryCodeSerializerTest {

    private CountryCodeSerializer countryCodeSerializer;
    private JsonGenerator jsonGenerator;

    @Before
    public void setUp() throws Exception {
        countryCodeSerializer = new CountryCodeSerializer();
        jsonGenerator = mock(JsonGenerator.class);
    }

    @Test
    public void testNullCountryCodeThrowsIllegalArgumentException() throws Exception {
        try {
            countryCodeSerializer.serialize(null, jsonGenerator, null);
            fail("An IllegalArgumentException should have been thrown.");
        } catch (IllegalArgumentException e) {
            //ok
        }
    }

    @Test
    public void testCountryCodeConvertedToJsonString() throws Exception {
        countryCodeSerializer.serialize(CountryCode.parse("us"), jsonGenerator, null);
        verify(jsonGenerator).writeString("us");
    }
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为Jackson编写自定义JSON反序列化器?

编写多个自定义 Jackson 反序列化器来处理继承的正确方法

自定义序列化器和Jackson模式

如何编写自定义序列化程序?

如何在杰克逊中编写自定义属性反序列化器

DJANGO:如何编写自定义序列化器,以从相关模型中添加字段?

如何编写自定义json序列化程序并将值序列化为数组

Jackson 的多态序列化/反序列化和自定义序列化器/反序列化器

杰克逊(Jackson)如何在自定义序列化器/反序列化器中检索父bean

Spring Boot 2.1.4:@Autowired在自定义的Jackson序列化器/反序列化器中不起作用,如何启用它?

如何使用REST在Camel w / o spring中设置全局自定义Jackson序列化器

使用Jackson进行自定义反序列化:扩展默认反序列化器

使用Jackson序列化自定义地图

用于Optional <?>的Jackson自定义序列化程序

某些字段的Jackson JSON自定义序列化

使用Jackson自定义JSON反序列化

使用Jackson自定义Collection <T>的序列化

Jackson对多态对象的自定义反序列化

使用Jackson自定义反序列化列表

Scala jackson - 自定义反序列化器不兼容类型

Jackson-更改映射密钥名称而无需自定义序列化器

当值为“ null”时,Jackson忽略自定义字段反序列化器

在特定字段上自定义Jackson序列化器

Spring Jackson 自定义反序列化器未调用

将服务注入自定义的Jackson序列化器

向 Jackson 反序列化器添加自定义参数

如何使用尊重自定义注释的Jackson来执行自定义JSON反序列化?

如何在Jackson上使用自定义序列化程序?

Jersey + Jackson JSON日期格式序列化-如何更改格式或使用自定义JacksonJsonProvider