Dart测试中如何抛出携带伪造栈跟踪的自定义异常?
Dart自定义栈跟踪抛出方案
可以实现,Dart原生语法就支持抛出自定义伪造的栈跟踪,无需额外依赖。
正确实现方式
你想要的效果不需要修改Exception的构造参数,Dart的throw关键字本身就支持传入第二个参数作为自定义栈跟踪,语法为 throw <异常对象>, <自定义栈跟踪对象>,你的代码可以直接改写为:
final FakeStartContext startContext = FakeStartContext( // 栈跟踪作为throw的第二个参数传入,不要放在Exception构造内 runOverride: () async => throw Exception(fakeError), fakeStackTrace, );
后续通过catch(err, stacktrace)语法捕获时,拿到的stacktrace就是你传入的伪造栈跟踪,完全符合需求。
补充说明
- 如果你需要手动生成伪造的栈跟踪实例,可以直接用
StackTrace.fromString()方法,传入你自定义的栈跟踪字符串即可:final fakeStackTrace = StackTrace.fromString('''
#0 fakeMethod (package:your_project/fake_file.dart:100:20)
#1 upstreamFakeMethod (package:your_project/fake_file.dart:200:10)
''');
- 该语法兼容Dart 2.12及以上所有版本,Flutter、纯Dart服务端/脚本环境均可正常使用。 内容的提问来源于stack exchange,提问作者Chen
相关产品推荐
相关产品推荐

