如何测试断言?

cre*_*not 5 dart flutter flutter-test

我发现了如何测试异常或错误:https : //stackoverflow.com/a/54241438/6509751

但是如何测试以下内容assert是否正常工作?

void cannotBeNull(dynamic param) {
  assert(param != null);
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但不起作用。断言被简单地打印出来并且测试失败:

void main() {
  test('cannoBeNull assertion', () {
    expect(cannotBeNull(null), throwsA(const TypeMatcher<AssertionError>()));
  });
}
Run Code Online (Sandbox Code Playgroud)

cre*_*not 10

这有两个关键方面:

例子:

expect(() {
  assert(false);
}, throwsAssertionError);
Run Code Online (Sandbox Code Playgroud)

应用于问题中的代码:

void main() {
  test('cannoBeNull assertion', () {
    expect(() => cannotBeNull(null), throwsAssertionError);
  });
}
Run Code Online (Sandbox Code Playgroud)

为什么我们需要传递回调?好吧,如果你有一个没有参数的函数,你也可以传递一个对它的引用

如果没有回调,断言将在expect执行之前进行评估,并且无法expect捕获错误。通过传递回调,我们允许expect调用该回调,这允许它捕获AssertionError并处理它。