如何测试断言?

How do I test an assertion?

我发现了如何测试异常或错误:

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

void cannotBeNull(dynamic param) {
  assert(param != null);
}

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

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

这有两个关键方面:

  • 将回调传递给 expect。当你这样做时,你永远不会做错什么,即使你只是实例化一个对象。这已经显示 .

  • 使用throwAssertionError.

示例:

expect(() {
  assert(false);
}, throwsAssertionError);

应用于问题中的代码:

void main() {
  test('cannoBeNull assertion', () {
    expect(() => cannotBeNull(null), throwsAssertionError);
  });
}

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

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