Ich habe einige Code asynchron konvertiert. Der ursprüngliche Komponententest verwendete die Annotation @Test(expected = MyExcpetion.class)
, aber ich glaube nicht, dass dies funktioniert, da die Ausnahme, auf die ich zugreifen möchte, in java.util.concurrent.ExcutionException
eingeschlossen ist. Ich versuchte meine Zukunft wie diese fordern aber meine Behauptung ist nach wie vor versagt und ich liebe nicht, dass ich in return null
Wie kann ich Ausnahmen in der Zukunft testen?
myApiCall.get(123).exceptionally((ex) -> {
assertEquals(ex.getCause(),MyCustomException.class)
return null
}
Ich habe auch versucht, diesen Geschmack zu verleihen hatte aber immer noch nicht funktioniert
myApiCall.get(123).exceptionally((ex) -> {
assertThat(ex.getCause())
.isInstanceOF(MyException.class)
.hasMessage("expected message etc")
return null;
}
Meine API löst nur eine Ausnahme aus, wenn sie keine ID finden kann. Wie sollte ich das richtig testen? Kann ich diese ursprüngliche Anmerkung trotzdem verwenden?
mein API-Aufruf reicht bis zu db wenn ausgeführt. In diesem Test richte ich meine Zukunft ein, um einen Fehler zurückzugeben, so dass es nicht wirklich versucht, mit irgendetwas zu kommunizieren. der im Test befindlichen Code sieht wie folgt aus
public class myApiCall {
public completableFuture get(final String id){
return myService.getFromDB(id)
.thenApply(
//code here looks at result and if happy path then returns it after
//doing some transformation
//otherwise it throws exception
)
}
}
in der Unit-Test-I myService.getFromDB(id)
zwingen falsche Daten zurück, damit ich Ausnahme testen können und halten Sie auch diese ein Unit-Test erreichen, nicht zu db usw.
Vermutlich sind Ihre Delegierten zu einem anderen Thread "Get". Beachten Sie, dass JUnit nicht auf die Fertigstellung wartet. Wenn die Testmethode beendet wird, wird der Java-Prozess beendet. Stattdessen auf die CF "kommen", um auf das Ergebnis zu warten. Wenn es eine Ausnahme gibt, packen Sie sie aus und bestätigen Sie sie (oder wiederholen Sie sie und verwenden Sie Ihr 'expected'). –
Was ist myApiCall hier? – fxrbfg
API-Aufruf reicht nur für Daten db aus.Lassen Sie mich etwas in den Code oben so aktualisieren, vielleicht ist es klarer – Barry