Wie Sie überprüfen, wenn-Anweisung in der Methode mit Mockito und JUnit?
Habe ich die Methode, dass ich getestet werden sollte. Code (natürlich einige Teile wurden geschnitten):
public class FilterDataController {
public static final String DATE_FORMAT = "yyyy-MM-dd";
@Autowired
private FilterDataProvider filterDataProvider;
@ApiOperation(value = "Get possible filter data",response = ResponseEntity.class)
@ApiResponses(value = {
@ApiResponse(...),
@ApiResponse(...)})
@RequestMapping(path = "...", method = RequestMethod.GET)
public ResponseEntity<Object> getPossibleFilterData(
@RequestParam(value = "startDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date startDate,
@RequestParam(value = "endDate") @DateTimeFormat(pattern=DATE_FORMAT) final Date endDate) {
if (endDate.compareTo(startDate) == -1){
throw new ValueNotAllowedException("End date should be after or equal start date");
}
else {
Date newEndDate = endDate;
if (startDate.equals(endDate)){
newEndDate = new Date(endDate.getTime() + TimeUnit.DAYS.toMillis(1) - 1);
}
List<String> possibleCountries = Lists.newArrayList(filterDataProvider.getPossibleCountries(startDate, newEndDate));
return new ResponseEntity<>(new FilterResponse(possibleCountries),HttpStatus.OK);
}
}
}
Frage: wie um zu überprüfen, wenn-Anweisung in der Methode getPossibleFilterData
mit Mockito und JUnit? Ich will pass gleich Termine zur Methode dann überprüfen, ob meine if-Anweisung funktioniert.
Wie bereits in vielen der Antworten, die tests sollten nicht davon ausgehen, dass Ihre Implementierung: was ist, wenn Sie die Umgestaltung der Methode, so gibt es richtige Werte, sondern verwendet keine
vielen Dank für die Beratung.
if
Aussage überhaupt? Anstatt anzunehmen, dass pass falschen Werten und den test bestehen, nur wenn Sie fangen die richtige exception.vielen Dank für die Beratung.
InformationsquelleAutor Woland | 2016-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich wollen, eine Reine unit test integration test, Sie konnte sich auf die annotation
@Mock
zu verspotten, Ihren serviceFilterDataProvider
und@InjectMocks
zu injizieren Ihre mock in Ihrer Instanz vonFilterDataController
.Dann könnte man vorschlagen, die 3 tests:
ValueNotAllowedException
getestet werden konnten out of the box mit@Test(expected = ValueNotAllowedException.class)
.Wenn Sie brauchen, um stellen Sie sicher, dass
filterDataProvider.getPossibleCountries(startDate, newEndDate)
genannt wurde, mit der erwarteten Argumente, die Sie verwenden müssenverify
.Der code würde dann etwa so lauten:
filterDataProvider
hieß mit richtigen Daten? Ich will geschicktgetPossibleFilterData
gleich Termine, und überprüfen Sie dann, dassfilterDataProvider.getPossibleCountries(startDate, newEndDate)
genannt mit den korrigierten Daten.InformationsquelleAutor Nicolas Filotto
Haben Sie zu verspotten
FilterDataProvider
und dann injizieren diese in den test-Klasse mit InjectMocks.getPossibleFilterData
wird die zu testende Methode, so wählen Sie einen beliebigen bestimmten Datum (verwenden SieCalendar.set(...)
, dannCalendar.getTime()
) und senden diese gleichen Datum, da sowohl die startDate und endDate.Nun nach
getPossibleFilterData
abgeschlossen ist, können Sie überprüfen, obfilterDataProvider.getPossibleCountries
genannt wurde, mit einem Enddatum, das eine Millisekunde mehr als das Startdatum. Dies kann durchCalendar.getTimeInMillis()
im inneren des verspottet-Klasse Methode, oder durch überprüfen mit Mockito mit einem Datum in einer Millisekunde mehr als das Datum, ursprünglich angegeben.Edit: Code-Beispiel:
Ive Hinzugefügt ein code-Beispiel für Sie
Erfordert code zu schreiben Konstruktor für
FilterDataController
, aber in meiner situation ist es unpassend.Aber Dank solchen Ansatz. Ich werde daran denken, dass. +1InformationsquelleAutor mdewit
Sehe ich zwei wesentliche Ansätze.
verify
. Es gibt beispielsweiseverify(test).testing(Matchers.eq(12));
. Aber in meinem Fall möchte ich, um zu überprüfen, dass die Methode in meiner Methode aufgerufen wurde mit den korrigierten Daten. Vielleicht etwas wie, dassnewEndDate = ...; verify(FilterDataController).getPossibleFilterData().getPossibleCountries(Matchers.eq(startDate, newEndDate));
InformationsquelleAutor Pelit Mamani