Java 使用Mockito到mock接口时出现空指针异常

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); } 这是我的测试: @测试

我使用Mockito测试以下方法:

受保护的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())。然后返回(供应商);