Flutter: Test that a specific exception is thrown

百般思念 提交于 2019-12-01 14:48:51

问题


in short, throwsA(anything) does not suffice for me while unit testing in dart. How to I test for a specific error message or type?

Here is the error I would like to catch:

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

here is the current assertion that passes, but would like to check for the error type above:

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

This is what I want to do:

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


回答1:


This should do what you want:

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

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

if you just want to check for exception check this answer:




回答2:


In case anyone wants to test with an async function like I had to do all you need to do is add async keyword in the expect, bearing in mind that the lookupOrderDetails is an async function:

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

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

It still uses Gunter's answer which is very good!




回答3:


First import correct package 'package:matcher/matcher.dart';

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


来源:https://stackoverflow.com/questions/54241396/flutter-test-that-a-specific-exception-is-thrown

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!