11

Dart 単体テストで、print が呼び出されたことを確認するにはどうすればよいですか?

チュートリアル用のサンプル コードを書いており、それをテストしたいと考えています。print簡単にするために使用する多くのサンプル。単体テストで、正しい入力で print が呼び出されることを確認したいと思います。

ありがとう!

4

2 に答える 2

8

更新: ZoneSpecificationを使用すると、関数をオーバーライドできますprint。カスタム ゾーン内でコード アンダー テストを実行することにより、print関数の呼び出しをキャプチャできます。たとえば、次のテストでは、すべての印刷メッセージをメモリ内 list にリダイレクトします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);
};
于 2016-08-01T23:11:31.250 に答える
6

unittest がこれに固有のものを追加するとは思いませんが、テストのスコープ内のトップレベルの関数をオーバーライドして、ログへの呼び出しをキャプチャできます。次に例を示します。

var printLog = [];
void print(String s) => printLog.add(s);

main() {
  test('print', () {
    myFuncUnderTest();
    expect(printLog.length, 2);
    expect(printLog[0], contains('hello'));
    // etc...
  });
}
于 2013-02-08T03:01:28.200 に答える