How do I test an assertion?

你离开我真会死。 提交于 2019-12-11 15:33:31

问题


I found out how you can test an exception or error: https://stackoverflow.com/a/54241438/6509751

But how do I test that the following assert works correctly?

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

I tried the following, but it does not work. The assertion is simply printed out and the test fails:

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

回答1:


There are two key aspects to this:

  • Pass a callback to expect. When you do that, you can never do something wrong, even if you just instantiate an object. This was already shown in the linked answer.

  • Use throwAssertionError.

Example:

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

Applied to the code from the question:

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

Why do we need to pass a callback? Well, if you have a function without parameters, you can also pass a reference to that as well.

If there was no callback, the assertion would be evaluated before expect is executed and there would be no way for expect to catch the error. By passing a callback, we allow expect to call that callback, which allows it to catch the AssertionError and it is able to handle it.



来源:https://stackoverflow.com/questions/58383041/how-do-i-test-an-assertion

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!