web-dev-qa-db-ja.com

Flutter:特定の例外がスローされることをテストします

つまり、Dartでのユニットテスト中は、throwsA(anything)では不十分です。 特定のエラーメッセージまたはタイプをテストするにはどうすればよいですか?

これが私がキャッチしたいエラーです:

_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});
}
_

これが通過する現在のアサーションですが、上記のエラータイプを確認したいと思います。

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

これは私がしたいことです:

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

10
xpeldev

これはあなたが望むことをするはずです:

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

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

例外をチェックしたいだけなら、これをチェックしてください answer

8

`TypeMatcher <> 'がFlutter 1.12.1で廃止された後、これが機能することがわかりました:

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

最初に正しいパッケージをインポート'package:matcher/matcher.Dart';

expect(() => yourOperation.yourMethod(),
      throwsA(const TypeMatcher<YourException>()));
0
Rajat Arora

私がしなければならなかったような非同期関数を使ってテストしたい場合は、asyncが非同期関数であることを念頭に置いて、expectにlookupOrderDetailsキーワードを追加するだけです。

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

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

それはまだ非常に良いガンターの答えを使用しています!

0
Mihai Neagoe