Java 如何使用JUnit和Mockito测试定制JsonSerializer

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 {

我有一个定制的JsonSerialzier以特殊格式序列化日期:

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方法