You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:24:00