【发布时间】:2021-11-25 18:09:21
【问题描述】:
鉴于这个最小的测试
test('ignore failures', () {
Future<void> failingFunc() async {
throw Exception('BOOOOM');
}
failingFunc();
});
测试失败,输出如下:
Exception: BOOOOM
main.<fn>.<fn>.<fn>.failingFunc
test/…/auth/auth_action_bloc_test.dart:374
main.<fn>.<fn>.<fn>
test/…/auth/auth_action_bloc_test.dart:377
===== asynchronous gap ===========================
dart:async _AsyncAwaitCompleter.completeError
test/unit/features/auth/auth_action_bloc_test.dart main.<fn>.<fn>.<fn>.failingFunc
test/…/auth/auth_action_bloc_test.dart:1
main.<fn>.<fn>.<fn>
test/…/auth/auth_action_bloc_test.dart:377
不明白为什么该测试会失败。
我的理解是 failingFunc() 会“静默”失败,因为它没有等待。 (即异常将被抛出“其他地方”,并被忽略)
我(几乎)确信在生产代码中这样的事情会正常工作。
以下测试确实以我期望的方式失败(即添加 await ):
test('ignore failures', () async {
Future<void> failingFunc() async {
throw Exception('BOOOOM');
}
await failingFunc();
});
它按预期失败了
Exception: BOOOOM
main.<fn>.<fn>.<fn>.failingFunc
test/…/auth/auth_action_bloc_test.dart:374
main.<fn>.<fn>.<fn>
test/…/auth/auth_action_bloc_test.dart:377
【问题讨论】:
标签: dart testing async-await