如果我有

class ErrorThrower{
  void throwAnError(String argument){
    throw new Error();
  }
}

我想测试throwAnError是否引发Exception,或更准确地说是Error的实例

这是我的代码,但是不起作用
  test('', () {
    var errorThrower = new ErrorThrower();
    expect(errorThrower.throwAnError("string"), throwsException);
  });

最佳答案

Dart的测试包可以检测到抛出的错误,但是该函数要么需要异步(最常见的是返回Future),要么作为回调提供,因此expect函数可以对它进行延迟评估。在您的示例中:

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

... 应该管用。请注意,我写的不是throwsErrorthrowsException,在Dart中这是两种不同的东西(它们彼此不会继承),目的是不会在生产代码中故意捕获错误,而应该捕获异常(例如FormatException)。

08-05 11:13