我有自定义的StdDeserializer<Date>,如何在这里对重写的deserialize方法进行单元测试?

或者我如何在这里为单元测试准备或模拟JsonParsergo 灭菌方法?

public class StringToDateDeserializer extends StdDeserializer<Date> {

    protected StdDateFormat df = new StdDateFormat();

    public StringToDateDeserializer() {
        this(null);
    }

    protected StringToDateDeserializer(Class<?> T) {
        super(T);
    }

    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
        String dateStr = jsonParser.getText();
        if (StringUtils.isEmpty(dateStr)) {
            return null;
        }
        try {
            return df.parse(dateStr);
        } catch (ParseException e) {
            throw new MyCustomException("Invalid date passed, ISO 8601 is expected");
        }
    }
}

推荐答案

StringToDateDeserializer%覆盖率的测试示例.

public class TestClass {
    private ObjectMapper mapper;
    private StringToDateDeserializer deserializer;

    @Before
    public void setup() {
        mapper = new ObjectMapper();
        deserializer = new StringToDateDeserializer();
    }

    @Test
    public void dateTest() throws IOException {
        Date date = deserializer.deserialize(prepareParser("{ \"value\":\"2020-07-10T15:00:00.000\" }"), mapper.getDeserializationContext());

        Assert.assertNotNull(date);
        Assert.assertEquals(1594393200000L, date.getTime());
    }

    @Test(expected = MyCustomException.class)
    public void exceptionalTest() throws IOException {
        deserializer.deserialize(prepareParser("{ \"value\":\"2020-07\" }"), mapper.getDeserializationContext());
    }

    @Test
    public void nullTest() throws IOException {
        Date date = deserializer.deserialize(prepareParser("{ \"value\":\"\" }"), mapper.getDeserializationContext());

        Assert.assertNull(date);
    }

    private JsonParser prepareParser(String json) throws IOException {
        JsonParser parser = mapper.getFactory().createParser(json);
        while (parser.nextToken() != JsonToken.VALUE_STRING);
        return parser;
    }
}

Java相关问答推荐

将具有多个未知字段的SON映射到Java POJO

Java记录的不同序列化/反序列化

如何判断一个矩阵是否为有框矩阵?

只需最少的代码更改即可将版本号标记添加到日志(log)

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

MySQL数据库中未应用具有Spring数据的唯一约束

为什么当我创建Robot对象时,JavaFX引发IlLegalStateException异常?

在Eclipse中调试未导出的JDK模块的Java包

二进制数据的未知编码/序列化

Regex以查找不包含捕获组的行

Oj算法 MatrixR032从字符串、归一化和余弦相似度计算创建

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

Java 21中泛型的不兼容更改

如何在ApacheHttpClient 5中为单个请求设置代理?

为什么JavaFX MediaPlayer音频播放在Windows和Mac上运行良好,但在Linux(POPOS/Ubuntu)上却有问题?

HBox内部的左对齐按钮(如果重要的话,在页码内)

如何在MPAndroidChart中的条形图上正确添加标签

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

如何在Java上为循环数组从synchronized迁移到ReentrantLock