📅  最后修改于: 2023-12-03 14:40:37.010000             🧑  作者: Mango
在 Dart 中,我们可以使用测试来确保我们的代码的正确性。我们可以使用一个称为 dart:test
包的官方测试框架。测试框架具有一些内置的断言,我们可以在测试中使用它们。
在某些情况下,我们需要测试代码中的错误情况,而不是代码的正确性。这时,我们可以使用期望断言失败。
期望断言失败是一个机制,它帮助我们测试在给定条件下代码是否会引发异常。例如,我们可能想要断言在输入无效参数时,函数是否会引发异常。
在期望断言失败中,我们使用一个特殊的 expect()
函数,并将函数调用或表达式作为参数传递给它。expect()
函数的第二个参数是一个可选的描述错误信息的字符串。如果函数调用或表达式不引发异常,则测试将失败,并显示错误消息。
考虑下面的函数,它需要两个整数参数。它将返回这两个数字之和,但如果任何一个参数不是整数,则会引发异常。
int add(int a, int b) {
if (a is! int || b is! int) {
throw ArgumentError('Arguments must be integers.');
}
return a + b;
}
现在,我们想要测试该函数是否在给定的参数不是整数时是否抛出异常。我们可以编写以下测试:
test('add function throws ArgumentError with invalid arguments', () {
expect(() => add('1', 2), throwsArgumentError);
expect(() => add(1, '2'), throwsArgumentError);
expect(() => add('1', '2'), throwsArgumentError);
});
我们传递一个 lambda 表达式,该表达式调用 add()
函数并将无效参数传递给它。我们还使用 throwsArgumentError
断言,该断言测试是否引发了 ArgumentError
异常。
如果函数没有引发 ArgumentError
异常,则测试将失败,并显示以下错误消息:
Expected: throws 'ArgumentError'
Actual: <Closure: () => int>
Which: did not throw at all
期望断言失败是一个强大的机制,它帮助我们测试代码的容错性。使用 Dart 中的测试框架,我们可以轻松地编写期望断言失败的测试。