考虑一个基于传递的参数执行一些异常处理的函数:
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/