如何测试带参数的方法是否在 dart 中引发异常?

Tre*_*ree 4 testing dart

如果我有

class ErrorThrower{
  void throwAnError(String argument){
    throw new Error();
  }
}
Run Code Online (Sandbox Code Playgroud)

我想测试 throwAnError 是否抛出异常,或者更准确地说是一个 Error

这是我的代码,但它不起作用

  test('', () {
    var errorThrower = new ErrorThrower();
    expect(errorThrower.throwAnError("string"), throwsException);
  });
Run Code Online (Sandbox Code Playgroud)

mat*_*rey 6

Dart 的 testing 包可以检测抛出的错误,但该函数要么需要是异步的(最常见的是返回 a Future),要么作为回调提供,因此该expect函数可以懒惰地评估它。在你的例子中:

test('', () {
  var errorThrower = new ErrorThrower();
  expect() => errorThrower.throwAnError("string"), throwsError);
});
Run Code Online (Sandbox Code Playgroud)

... 应该管用。请注意,我写了throwsErrornot throwsException,在 Dart 中,这是两个不同的东西(不会相互继承),目的是在生产代码中不会故意捕获错误,而FormatException应该是异常(例如)。