杰克逊顶部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

当涉及使用杰克逊反序列化JSON的单元测试代码时,我们可能会发现更容易嘲笑ObjectMapper#ReadValue.方法。通过这样做,我们不需要在我们的测试中指定Long JSON输入。

在本教程中,我们将看看我们如何实现这一目标Mockito.

2. Maven依赖项

首先,作为maven依赖,我们将使用小核心核心杰克逊 - 数据库

<依赖项>  org.mockito   Mockito-Core   3.3.3   test   <依赖项>  com.fasterxml.jackson.core   Jackson-Databind   2.10.3   bundle  

3.ObjectMapper.例子

让我们考虑一个简单的班级:

公共类花{私有字符串名称;私人整数花瓣;公共花(字符串名称,整数花瓣){this.name = name;这个.petals =花瓣;} //默认构造函数,getters和setter}

并假设我们有一个用于验证json字符串表示的类目的。它需要ObjectMapper.作为构造函数的论点 - 这使我们能够轻松嘲笑它:

公共类FlowerJshstringValidator {Private ObjectMapper ObjectMapper;公共花jstringvalidator(ObjectMapper ObjectMapper){this.ObjectMapper = ObjectMapper;}公共布尔花川(String jsonflowerasstring)抛出jsonprocessingexception {flower flower = objectmapper.readvalue(jsonflowerasstring,flower.class);返回flower.getpetals()> 0;}}

接下来,我们将使用Mockito.为验证器逻辑写入单元测试。

4.与Mockito进行单元测试

让我们首先设置测试类。我们很容易嘲笑一个ObjectMapper.并将其作为对我们的构造函数论点FlowerstringValidator.班级:

@extendwith(mockitoextension.class)public类flowerjstringvalidatorunittest {@mock private objectmapper objectmapper;私人花朵jstringvalidator flowerjshstringvalidator;@beforeeach public void setup(){flowerjsonstringvalidator = new flowerjshstringvalidator(ObjectMapper);} ...}

注意我们正在使用JUNIT 5.在我们的测试中,我们已经向我们注释了我们的测试课程@extendwith(mockitoextension.class)

现在我们有我们的模拟ObjectMapper.准备好了,让我们写一个简单的测试:

@test公共void whencallinghaspetalswithpetals_thenreturnstrue()扔jsonprocessingexception {flower rose = new flower(“测试花朵”,100);什么时候(objectMapper.readValue(AnyString(),eq(flower.class)))。然后return(玫瑰);asserttrue(FlowerjshstringValidator.Flowerhaspetals(“这可能是一个非常长的JSON花”));验证(objectMapper,次(1))。ReadValue(AnyString(),EQ(Flower.class));}

既然我们嘲笑ObjectMapper.在这里,我们可以忽略其输入并专注于其输出,然后将其传递给实际的验证器逻辑。正如我们所看到的,我们不需要指定有效的JSON输入,这可能在真实的场景中非常长,困难。

结论

在本文中,我们看到了如何模拟ObjectMapper.提供周围有效的测试用例。最后,可以找到代码在github上

杰克逊底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!