簡體   English   中英

Mockito.when().thenReturn() 不起作用或返回 null

[英]Mockito.when().thenReturn() doesn't work or returns null

在測試期間會拋出 NullPointerException。 我嘗試調試它,但我唯一解決的問題是 eventOptional 始終為 null。就像 Mockito.when().thenReturn() 不起作用一樣。 有人可以幫忙嗎? 這是我用於測試服務和測試本身的代碼:

@Service
public class EventService {

    @Autowired 
    public EventService(EventRepository eventRepository) {
        this.eventRepository = eventRepository;
    }
    //...
    public void updateEvent(EventDTO eventDTO) {
        Optional<Event> eventOptional = eventRepository.findOneById(eventDTO.getId());

        eventOptional.orElseThrow(() -> new BadRequestException(EVENT_NOT_FOUND));
        //...
    }
}

和測試 class:

@RunWith(MockitoJUnitRunner.class)
public class EventServiceTest {

    @Mock
    private EventRepository eventRepository;
    @InjectMocks
    private EventService eventService;

    private Event sampleEventFromDb;

    @Before
    public void setUp() throws Exception {

        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void shouldUpdateEventTestAndWithProperTime() throws Exception {
        EventDTO eventDTOMock = Mockito.mock(EventDTO.class);

        sampleEventFromDb = Event.builder()
            .name("name")
            .startDateTime(LocalDateTime.now())
            .placeName("place")
            .description("description")
            .publicEvent(true)
            .owner(new User())
            .build();

        Mockito.when(eventRepository.findOneById(anyString())).thenReturn(Optional.of(sampleEventFromDb));
        Mockito.when(eventDTOMock.getId()).thenReturn("1");

        eventService.updateEvent(eventDTOMock); //NullPointerException
        //...
    }
}

我得到了同樣的錯誤,在嘗試了很多東西之后我通過用any()替換anyString()方法來修復它

嘗試這個:

Mockito.when(eventRepository.findOneById(any())).thenReturn(Optional.of(sampleEventFromDb));

看起來問題是initMock被調用兩次:一次是由跑步者,一次是由setUp方法。 使用常規運行程序運行測試或從setUp方法中刪除initMocks調用可以解決此問題。

將 anyList()、anyMap()....... 更改為 any()。 經過長時間的調試,終於成功了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM