Dart 単体テストで、print が呼び出されたことを確認するにはどうすればよいですか?
チュートリアル用のサンプル コードを書いており、それをテストしたいと考えています。print
簡単にするために使用する多くのサンプル。単体テストで、正しい入力で print が呼び出されることを確認したいと思います。
ありがとう!
Dart 単体テストで、print が呼び出されたことを確認するにはどうすればよいですか?
チュートリアル用のサンプル コードを書いており、それをテストしたいと考えています。print
簡単にするために使用する多くのサンプル。単体テストで、正しい入力で print が呼び出されることを確認したいと思います。
ありがとう!
更新: 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);
};
unittest がこれに固有のものを追加するとは思いませんが、テストのスコープ内のトップレベルの関数をオーバーライドして、ログへの呼び出しをキャプチャできます。次に例を示します。
var printLog = [];
void print(String s) => printLog.add(s);
main() {
test('print', () {
myFuncUnderTest();
expect(printLog.length, 2);
expect(printLog[0], contains('hello'));
// etc...
});
}