dart - 你如何在 Dart 中对异常进行单元测试?

标签 dart

考虑一个基于传递的参数执行一些异常处理的函数:

List range(start, stop) {
    if (start >= stop) {
      throw new ArgumentError("start must be less than stop");
    }
    // remainder of function
}

我如何测试是否引发了正确的异常?

最佳答案

在这种情况下,有多种方法可以测试异常。简单地测试是否引发了非特定异常:

expect(() => range(5, 5), throwsException);

测试是否引发了正确类型的异常:

有几个用于一般用途的预定义匹配器,例如 throwsArgumentError , throwsRangeError , throwsUnsupportedError等。对于不存在预定义匹配器的类型,您可以使用 TypeMatcher<T> .

expect(() => range(5, 2), throwsA(TypeMatcher<IndexError>()));

确保不会引发异常:

expect(() => range(5, 10), returnsNormally);

测试异常类型和异常消息:

expect(() => range(5, 3), 
    throwsA(predicate((e) => e is ArgumentError && e.message == 'start must be less than stop')));

这是另一种方法:

expect(() => range(5, 3), 
  throwsA(allOf(isArgumentError, predicate((e) => e.message == 'start must be less than stop'))));

(感谢 Google 的 Graham Wheeler 提供了最后两个解决方案)。

关于dart - 你如何在 Dart 中对异常进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298969/

相关文章:

regex - 如何在Flutter中根据指定的关键字拆分字符串?

AndroidX 不兼容导致 Flutter Gradle 失败

flutter - 从 DART 中的 List<Map<String,dynamic>> 获取特定键的数组

flutter - 使用 Provider 时清除 Flutter 中的状态

android-studio - 使用 Android Studio 在 Flutter 中使用 Getter/Setter

logging - 如何在 Dart 中导入日志库?

dart - 如何从装饰器中找到当前路线?

servicestack - Dart DateTime.parse() ServiceStack 返回的字符串日期

http - 状态错误 : Cannot set the body fields of a Request with content-type "application/json"

list - 如何在Dart中深度复制嵌套列表?