Java 使用Mockito到mock接口时出现空指针异常
我使用Mockito测试以下方法:Java 使用Mockito到mock接口时出现空指针异常,java,unit-testing,nullpointerexception,mockito,Java,Unit Testing,Nullpointerexception,Mockito,我使用Mockito测试以下方法: 受保护的void producedFieldValue(目标目标)抛出ValueProducerCreationException{ String mappedValue=(String)valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList()).get(); target.setProducedField(mappedValue); } 这是我的测试: @测试
受保护的void producedFieldValue(目标目标)抛出ValueProducerCreationException{
String mappedValue=(String)valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList()).get();
target.setProducedField(mappedValue);
}
这是我的测试:
@测试
public void TestProducingProducedFieldValue()引发ValueProducerCreationException{
Target mockedTarget=Mockito.mock(Target.class);
ValueProducerFactory ValueProducerFactory=Mockito.mock(ValueProducerFactory.class);
List creationParameters=new ArrayList();
String mappedValue=“SomeString”;
Mockito.when(valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList()).get()).thenReturn(mappedValue);
SourceToTargetMapper sttm=新的SourceToTargetMapper(targetModelObjectFactory、mappingOperatorFactory、mapperFactory、valueProducerFactory);
标准生产现场价值(模拟目标);
验证(mockedTarget,Mockito.times(1)).setProducedField(Mockito.any());
}
但我一直得到这行的NullPointerExeption
:
Mockito.when(valueProducerFactory.createValueProducer("IdProducer", Collections.emptyList()).get()).thenReturn(mappedValue);
Mockito.when(valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList()).get())。然后返回(mappedValue);
ValueProducerFactory
是一个接口
并且createValueProducer
方法签名如下:
公共接口值ProducerFactory{
供应商createValueProducer(字符串producerName,列表creationParameters)抛出ValueProducerCreationException;
}
我有一个名为CachingValueProducerFactory的类来实现接口
@覆盖
公共供应商createValueProducer(字符串producerName,列表creationParameters)抛出ValueProducerCreationException{
Map您试图同时模拟两种方法。在这一行中:
Mockito.when(valueProducerFactory.createValueProducer("IdProducer", Collections.emptyList()).get()).thenReturn(mappedValue);
您正在对createValueProducer()
调用的结果调用get()
,调用结果为null
,因为您尚未模拟它
有两种解决方案:
使用深短截线:
ValueProducerFactory ValueProducerFactory=Mockito.mock(ValueProducerFactory.class,Mockito.RETURNS\u DEEP\u STUBS);
Mockito.when(valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList()).get()).thenReturn(mappedValue);
首先模拟供应商(注意删除的get()
):
Supplier=()->mappedValue;
ValueProducerFactory ValueProducerFactory=Mockito.mock(ValueProducerFactory.class);
Mockito.when(valueProducerFactory.createValueProducer(“IdProducer”,Collections.emptyList())。然后返回(供应商);