つまり、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));
これはあなたが望むことをするはずです:
expect(() => operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));
expect(() => operations.lookupOrderDetails(), isInstanceOf<MyCustErr>());
例外をチェックしたいだけなら、これをチェックしてください answer :
`TypeMatcher <> 'がFlutter 1.12.1で廃止された後、これが機能することがわかりました:
expect(() => operations.lookupOrderDetails(), throwsA(isInstanceOf<MyCustErr>()));
最初に正しいパッケージをインポート'package:matcher/matcher.Dart';
expect(() => yourOperation.yourMethod(),
throwsA(const TypeMatcher<YourException>()));
私がしなければならなかったような非同期関数を使ってテストしたい場合は、async
が非同期関数であることを念頭に置いて、expectにlookupOrderDetails
キーワードを追加するだけです。
expect(() **async** => **await** operations.lookupOrderDetails(), throwsA(const TypeMatcher<MyCustErr>()));
expect(() **async** => **await** operations.lookupOrderDetails(), isInstanceOf<MyCustErr>()));
それはまだ非常に良いガンターの答えを使用しています!