如何在dart测试中添加用户输入?

wxclj1h5  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(133)

我是dart的新手,正在尝试测试。我的第一个程序是一个接受用户输入的命令行工具。在测试过程中,我如何模拟它?
我的函数允许用户从列表中选择一个项目。如果函数成功地拒绝了通过“readLineSync”输入的太小或太大的整数,我想写测试。
如何在测试中创建输入?(使用test.dart)

uxhixvfz

uxhixvfz1#

如果你使用stdin来收集输入,你可以使用IOOverrides来覆盖stdin的行为。我使用的例子需要你安装mocktail作为一个开发依赖。给定函数:

String? collect() => stdin.readLineSync();

我想在测试过程中提供我自己的输入:

import 'dart:io' hide stdin;

import 'package:example/example.dart' show collect;
import 'package:mocktail/mocktail.dart';
import 'package:test/test.dart';

class FakeStdin extends Mock implements Stdin {}

void main() {
  test('collect returns input', () {
    final stdin = FakeStdin();

    when(() => stdin.readLineSync()).thenReturn('input!');

    IOOverrides.runZoned(
      () {
        expect(collect(), equals('input!')); // passes!
      },
      stdin: () => stdin,
    );
  });
}

相关问题