Java 如何使用JUnit和Mockito测试定制JsonSerializer
我有一个定制的JsonSerialzier以特殊格式序列化日期:Java 如何使用JUnit和Mockito测试定制JsonSerializer,java,junit,mockito,Java,Junit,Mockito,我有一个定制的JsonSerialzier以特殊格式序列化日期: public class CustomDateJsonSerializer extends JsonSerializer<Date> { @Override public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException {
public class CustomDateJsonSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException {
String outputDateValue;
//... do something with the Date and write the result into outputDateValue
gen.writeString(outputDateValue);
}
}
公共类CustomDateJsonSerializer扩展了JsonSerializer{
@凌驾
public void serialize(日期值、JsonGenerator gen、SerializerProvider arg2)引发IOException、JsonProcessingException{
字符串outputDateValue;
//…对日期执行某些操作,并将结果写入outputDateValue
gen.writeString(outputDateValue);
}
}
它工作得很好,但是如何使用JUnit和Mockito测试我的代码呢?或者更确切地说,我如何模拟JsonGenerator并访问结果
谢谢您的帮助。您可以这样做:
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times;
@RunWith(MockitoJUnitRunner.class)
public class CustomDateJsonSerializerTest {
@Mock
private JsonGenerator gen;
@Test
public void testOutputDateValue() {
CustomDateJsonSerializer serializer = new CustomDateJsonSerializer();
serializer.serialize(new Date(), gen, null /*or whatever it needs to be*/);
String expectedOutput = "whatever the correct output should be";
verify(gen, times(1)).writeString(expectedOutput);
}
}
您可以这样做:
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.times;
@RunWith(MockitoJUnitRunner.class)
public class CustomDateJsonSerializerTest {
@Mock
private JsonGenerator gen;
@Test
public void testOutputDateValue() {
CustomDateJsonSerializer serializer = new CustomDateJsonSerializer();
serializer.serialize(new Date(), gen, null /*or whatever it needs to be*/);
String expectedOutput = "whatever the correct output should be";
verify(gen, times(1)).writeString(expectedOutput);
}
}
在本例中,您可能不想模拟Json生成器(Jackson?),而只是使用它。但是如何处理void方法writeString(String s)?您可以简单地模拟
JsonGenerator
,并验证is是否使用预期的outputDateValue
调用了writeString方法。在这种情况下,您可能不想模拟Json生成器(Jackson?),而只是使用它。我尝试模拟JsonGenerator(Jackson!)。但是如何处理void方法writeString(String s)?您可以简单地模拟jsonggenerator
,并验证is是否已使用预期的outputDateValue
调用writeString方法