在我的Dart单元测试中,如何验证调用了print?

我正在为教程编写示例代码,我想对其进行测试.为简单起见,许多示例使用print.我希望我的单元测试能够验证使用正确的输入调用print.

谢谢!

推荐答案

更新:ZoneSpecification允许覆盖print函数.通过在自定义区域内运行测试代码,您可以捕获对print函数的调用.例如,下面的测试将所有打印消息重定向到内存列表log中:

import 'dart:async';
import 'package:test/test.dart';

var log = [];

main() {
  test('override print', overridePrint(() {
    print('hello world');
    expect(log, ['hello world']);
  }));
}

void Function() overridePrint(void testFn()) => () {
  var spec = new ZoneSpecification(
    print: (_, __, ___, String msg) {
      // Add to log instead of printing to stdout
      log.add(msg);
    }
  );
  return Zone.current.fork(specification: spec).run<void>(testFn);
};

Dart相关问答推荐

如何映射作为DART中其他模型基础的复杂模型

什么相当于 dart 中的 JAVA ThreadLocal?

dart - 通过异步等待避免递归 Stackoverflow

Flutter 网页打开网址并获取数据

Flutter中TextFieldForm中的字母间距

I/flutter (22027):MissingPluginException(在通道 plugins.flutter.io/cloud_firestore 上找不到方法 DocumentReference#setData 的实现)

一键式 Flutter 工具提示

Flutter 中带有导航栏的永久视图

设置文本以匹配Flutter中的列宽

如何用 Flutter 在同屏路由上制作英雄风格的动画?

Dart VM 的性能与 Node.js 相比如何?

Flutter web url 导航

如何在Dart中创建空Map

如何在Dart中测试流

在 Dart 中实现观察者模式

在 Dart 中切换失败

在 Dart 中,List.from 和 .of 以及 Map.from 和 .of 有什么区别?

你如何在 Dart 中创建一个 Stream?

dart中的动态和对象有什么区别?

如何用 Dart 格式化日期?