Kurz gesagt, throwsA(anything) reicht mir beim Unit-Test im Dart nicht aus. Wie teste ich auf eine bestimmte Fehlermeldung oder einen bestimmten Typ?

Hier ist der Fehler, den ich abfangen möchte:

class MyCustErr implements Exception {
  String term;

  String errMsg() => 'You have already added a container with the id 
  $term. Duplicates are not allowed';

  MyCustErr({this.term});
}

Hier ist die aktuelle Behauptung, die bestanden wird, aber nach dem obigen Fehlertyp suchen möchte:

expect(() => operations.lookupOrderDetails(), throwsA(anything));

Folgendes möchte ich tun:

expect(() => operations.lookupOrderDetails(), throwsA(MyCustErr));

24
xpeldev 17 Jän. 2019 im 20:37

4 Antworten

Beste Antwort

Dies sollte tun, was Sie wollen:

expect(() => operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));

expect(() => operations.lookupOrderDetails(), isInstanceOf<MyCustErr>());

Wenn Sie nur nach Ausnahmen suchen möchten, überprüfen Sie diese Antwort:

9
GameLoading 25 Nov. 2019 im 06:05

Nachdem "TypeMatcher <>" in Flutter 1.12.1 veraltet war, funktionierte dies wie folgt:

expect(() => operations.lookupOrderDetails(), throwsA(isInstanceOf<MyCustErr>()));
5
Ber 27 Jän. 2020 im 10:48

Wenn jemand mit einer asynchronen Funktion testen möchte, wie ich es tun musste, müssen Sie nur das Schlüsselwort async in die Erwartung einfügen, wobei zu berücksichtigen ist, dass lookupOrderDetails eine asynchrone Funktion ist:

expect(() **async** => **await** operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));

expect(() **async** => **await** operations.lookupOrderDetails(), isInstanceOf<MyCustErr>()));

Es wird immer noch Gunters Antwort verwendet, was sehr gut ist!

0
Mihai Neagoe 9 Okt. 2019 im 18:44

Importieren Sie zuerst das richtige Paket 'package: matcher / matcher.dart' ;

expect(() => yourOperation.yourMethod(),
      throwsA(const TypeMatcher<YourException>()));
0
Rajat Arora 14 Nov. 2019 im 18:57