我发现如何测试异常或错误:https://stackoverflow.com/a/54241438/6509751 https://stackoverflow.com/a/54241438/6509751
但我如何测试以下内容assert
工作正常吗?
void cannotBeNull(dynamic param) {
assert(param != null);
}
我尝试了以下方法,但它不起作用。断言只是打印出来,测试失败:
void main() {
test('cannoBeNull assertion', () {
expect(cannotBeNull(null), throwsA(const TypeMatcher<AssertionError>()));
});
}
这有两个关键方面:
-
将回调传递给expect
。当你这样做时,你永远不会做错事,即使你只是实例化一个对象。这已经显示了在链接的答案中 https://stackoverflow.com/a/54241438/6509751.
-
Use throwAssertionError https://api.flutter.dev/flutter/flutter_test/throwsAssertionError.html.
-
如果您使用的是纯 Dart 而不是 Flutter,您可以使用throwsA(isA<AssertionError>())
Example:
expect(() {
assert(false);
}, throwsAssertionError);
or
expect(() {
assert(false);
}, throwsA(isA<AssertionError>()));
应用于问题中的代码:
void main() {
test('cannoBeNull assertion', () {
expect(() => cannotBeNull(null), throwsAssertionError);
});
}
or
void main() {
test('cannoBeNull assertion', () {
expect(() => cannotBeNull(null), throwsA(isA<AssertionError>()));
});
}
为什么我们需要传递回调?好吧,如果你有一个不带参数的函数,你也可以传递一个参考对此也是如此。
如果没有回调,断言将在之前被评估expect
被执行了,就没有办法了expect
捕获错误。通过传递回调,我们允许expect
调用该回调,这允许它捕获AssertionError
它能够处理它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)