📜  dart 测试期望断言失败 - Dart (1)

📅  最后修改于: 2023-12-03 14:40:37.010000             🧑  作者: Mango

Dart 测试期望断言失败

在 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 中的测试框架,我们可以轻松地编写期望断言失败的测试。