#java #unit-testing #nullpointerexception #mockito
#java #модульное тестирование #исключение nullpointerexception #mockito
Вопрос:
Я использую mockito для тестирования следующего метода.
protected void mapSubEntitiesSourceColToSubEntitiesTargetCol(Source source, Target target) throws
MapperCreationException, MappingException {
Mapper<SourceSubEntity, TargetSubEntity> subEntitiesSourceColToSubEntitiesTargetColMapper = mapperFactory.createMapper(SourceSubEntity.class, TargetSubEntity.class);
Collection<TargetSubEntity> mappedValue = new LinkedList<>();
for (SourceSubEntity e : source.getSubEntitiesSourceCol()) {
mappedValue.add(subEntitiesSourceColToSubEntitiesTargetColMapper.apply(e));
}
target.setSubEntitiesTargetCol(mappedValue);
}
и вот мой тест:
@Test
public void TestMappingSubEntitiesSourceColToSubEntitiesTargetCol() throws
MapperCreationException, MappingException {
Source mockedSource = Mockito.mock(Source.class);
Target mockedTarget = Mockito.mock(Target.class);
SourceSubEntity sourceSubEntity = Mockito.mock(SourceSubEntity.class);
TargetSubEntity targetSubEntity = Mockito.mock(TargetSubEntity.class);
MapperFactory mapperFactory = Mockito.mock(MapperFactory.class);
Mapper<SourceSubEntity, TargetSubEntity> subEntitiesSourceColToSubEntitiesTargetColMapper = mapperFactory.createMapper(SourceSubEntity.class, TargetSubEntity.class);
Collection<SourceSubEntity> subEntitiesSourceCol = Arrays.asList(sourceSubEntity, sourceSubEntity);
SourceToTargetMapper sttm = new SourceToTargetMapper(targetModelObjectFactory,mappingOperatorFactory,mapperFactory,valueProducerFactory);
Mockito.when(mockedSource.getSubEntitiesSourceCol()).thenReturn(subEntitiesSourceCol);
Mockito.when(subEntitiesSourceColToSubEntitiesTargetColMapper.apply(sourceSubEntity)).thenReturn((TargetSubEntity) Arrays.asList(targetSubEntity));
sttm.mapSubEntitiesSourceColToSubEntitiesTargetCol(mockedSource,mockedTarget);
Mockito.verify(mockedTarget, Mockito.times(1)).setSubEntitiesTargetCol(Mockito.any());
Проблема, с которой я сталкиваюсь здесь, заключается в том, что я получаю NullPointerException
for subEntitiesSourceColToSubEntitiesTargetColMapper.apply(e)
.
Как я могу избавиться от этого?
Комментарии:
1. В вашем тесте строка «Mapper<SourceSubEntity, TargetSubEntity> subEntitiesSourceColToSubEntitiesTargetColMapper = mapperFactory.createMapper(SourceSubEntity.class , TargetSubEntity.class );» возвращено значение null. Я полагаю, что вы имели в виду, что Mapper<SourceSubEntity, TargetSubEntity> subEntitiesSourceColToSubEntitiesTargetColMapper = Mockito.mock(Mapper.class ); а затем Mockito.when(mapperFactory.createMapper(SourceSubEntity.class , TargetSubEntity.class )).Затем возврат(subEntitiesSourceColToSubEntitiesTargetColMapper);
2. @Jayr да!! Это была моя проблема! Спасибо! Не могли бы вы объяснить мне, почему это правильный подход?
3. Поскольку mapperFactory является издевательским экземпляром, любые вызовы его функций должны возвращать значение null, пока вы не укажете им, что возвращать.