Flutter:如何获取当前执行单元测试所在目录的File/Uri?
在Flutter单元测试中获取当前测试文件所在路径
在Flutter单元测试场景中,我们常需要获取当前执行的测试文件所在的文件夹路径——这里要注意,目标路径不是执行代码的文件路径(比如测试逻辑封装在外部工具类时,工具类的路径并非我们需要的)。常用的Platform.script和Directory.current在单元测试里都没法正常返回目标路径,比如做自定义Golden测试(对比文本文件而非图片)时,需要在测试文件所在目录存储对比文件,这时候就需要准确拿到这个路径。
我目前的非官方解决方案
我现在是通过解析测试的栈跟踪来实现的,代码如下:
import 'dart:stack_trace'; import 'dart:io'; Directory getCurrentTestDirectory() { // 遍历栈帧,找到测试文件对应的记录 final trace = Trace.current(); final testFrame = trace.frames.firstWhere( (frame) => frame.uri.path.endsWith('_test.dart'), orElse: () => throw StateError('未找到测试文件对应的栈帧'), ); // 从Uri解析出文件,再获取其父目录 final testFile = File.fromUri(testFrame.uri); return testFile.parent; }
这个方法的核心逻辑是:单元测试运行时,栈跟踪里会包含测试文件的调用信息,通过筛选后缀为_test.dart的栈帧,就能定位到当前运行的测试文件,进而获取它所在的文件夹。
不过这个实现依赖栈跟踪的结构,属于非官方方案,可能会随着Flutter测试框架的更新而失效,想请教有没有更稳定、官方的实现方式?
内容的提问来源于stack exchange,提问作者Clavum
相关产品推荐
相关产品推荐

