【问题标题】:NPE when not injecting mock data for mapper class (spring boot)不为映射器类注入模拟数据时的 NPE(弹簧启动)
【发布时间】:2021-08-05 04:50:34
【问题描述】:

我正在使用弹簧靴。我有下面的映射器类将实体对象映射到模型对象。

@Mapper(componentModel = "spring")
public interface PersonMapper {
    PersonEntity personModelToPersonEntity(PersonModel pm)
    PersonModel personEntityToPersonModel(PersonEntity pe)
}

服务类:

@Service
public class MyService{

    @Autowired
    PersonMapper personMapper;
    @Autowired
    PersonRepository personRepo;

    @Transactional
    public List<Person> getDetails() {
        List<Person> personList = personRepo.findAll();
        List<PersonModel> pm = personMapper.personEntityToPersonModel(personList);
    ...
    ...
    }
}

我有下面的 Junit 测试用例,我在其中模拟数据。

@ExtendWith(MockitoExtension.class)
public class PersonTest{
        
    @InjectMocks
    PersonService personService;
    // @Mock
    // PersonMapper personMapper;
        
    @Mock
    PersonRepository personRepo;
        
    @Test
    void getPersonDetailsTest() {
        given(personRepo.findAll()).willReturn(mymockData);
   
    //given(personMapper.personEntityToPersonModel(..).willReturn(..);
        ...
    }
}

如果我模拟 personMapper,一切都可以工作,但我不想在测试用例执行时模拟映射器类,因为我使用“given(personRepo.findAll()).willReturn(mymockData);”发送模拟实体数据,所以当它到达服务时它应该自动将发送的模拟数据转换为模型对象。就我而言,当我评论了模拟映射器类的代码时,它在映射器对象的服务类中抛出NullPointerException

【问题讨论】:

  • 因为那里什么都没有。你需要模拟它,或者手动注入它。

标签: spring-boot junit mockito


【解决方案1】:

作为@M。 Denium 说,什么都没有,因为应用程序上下文没有用MockitoExtension 提升。因此,您可以模拟您的 PersonMapper 并将其行为存根,或者使用 ReflectionTestUtils 手动注入它:

 @ExtendWith(MockitoExtension.class)
 public class PersonTest{

    @InjectMocks
    PersonService personService;

    PersonMapper personMapper = Mappers.getMapper(PersonMapper.class);

    @Mock
    PersonRepository personRepo;


    @Test
    void getPersonDetailsTest() {
        ReflectionTestUtils.setField(personService, "personMapper", personMapper);

        given(personRepo.findAll()).willReturn(mymockData);

        ...
    }
} 

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 2019-10-17
    • 2012-03-01
    • 1970-01-01
    • 2017-07-18
    • 2012-06-29
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多