嘲笑objectMapper ReadValue()方法
最后修改:2020年4月24日
1.概述
当涉及使用杰克逊反序列化JSON的单元测试代码时,我们可能会发现更容易嘲笑ObjectMapper#ReadValue.方法。通过这样做,我们不需要在我们的测试中指定Long JSON输入。
在本教程中,我们将看看我们如何实现这一目标Mockito.。
2. Maven依赖项
首先,作为maven依赖,我们将使用小核心核心和杰克逊 - 数据库:
<依赖项> org.mockito groupID> Mockito-Core Artifactid> 3.3.3 version> test scope> 依赖项> <依赖项> com.fasterxml.jackson.core groupId> Jackson-Databind Artifactid> 2.10.3 version> bundle type> 依赖项>
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上。