Während des Tests wird eine NullPointerException ausgelöst. Ich habe versucht, es zu debuggen und das einzige, was ich ausgearbeitet habe, war, dass eventOptional immer null ist. Genau wie wenn Mockito.when(). DannReturn() nicht funktioniert. Kann jemand helfen? Hier ist mein Code für einen getesteten Service und für den Test selbst:Mockito.when(). ThenReturn() funktioniert nicht oder gibt null zurück
@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));
//...
}
}
und die Testklasse:
@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
//...
}
}
Sie müssen MockitoAnnotations.initMocks (this) nicht ausführen, wenn Sie den Test mit dem MockitoJUnitRunner ausführen. Stellen Sie außerdem sicher, dass die findOneById-Methode nicht als statisch, privat oder final deklariert ist. – mdewit
@SotiriosDelimanolis, wird es durch den Läufer und/oder initMocks unter Verwendung der Reflexion initialisiert. Und es ist tatsächlich in diesem Beispiel initialisiert - ich habe es gerade überprüft. Das lustige ist, funktioniert bei TestNG gut, scheitert aber bei JUnit. Dies ist sicherlich kein Duplikat, also habe ich gewählt, um wieder zu öffnen. –
Eigentlich als ich MockitoJunitRunner einfach aufgab und das Repository manuell mokierte sowie den Dienst über seinen Konstruktor initialisierte - es funktioniert jetzt perfekt. – HectorBarbossa