【问题标题】:How mock a instance of File in Dart如何在 Dart 中模拟 File 的实例
【发布时间】:2021-04-26 01:32:59
【问题描述】:

我想模拟file.writeAsBytes的方法,但我不知道怎么做。

注意:我不打算保存测试中的文件,只是覆盖方法以便我可以得到路径列表。

有没有人经历过这种情况?

我的代码是

class ShareHelper {

  static Future<List<String>> createFilesFromString(
          List<FileShare> files) async =>
      Future.wait(
          files.map((fileShare) => _createFileFromString(fileShare)).toList());

  static Future<String> _createFileFromString(FileShare fileShare) async {
    final str = fileShare.base64.split(',');
    Uint8List bytes = base64.decode(str[1]);
    String dir = (await getTemporaryDirectory()).path;

    final fileName = _createFileName(fileShare.name);

    File file = File(
        "$dir/" + fileName);
    await file.writeAsBytes(bytes);
    return file.path;
  }
}

我的单元测试:

    test('Deve compartilhar os arquivos', () async {
      PathProviderPlatform.instance = MockPathProviderPlatform();

      final files = [
        FileShare(name: 'Teste/A', base64: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...'),
      ];

      final paths = await ShareHelper.createFilesFromString(files);
      expect(paths, []);
    });

  });

【问题讨论】:

  • 我强烈建议不要直接使用dart:io 中的File,而是使用package:file。这将允许您在测试中使用MemoryFileSystem

标签: flutter unit-testing dart mockito


【解决方案1】:

使用Mockito` 模拟包,这样您就可以轻松地模拟文件并使用虚假响应覆盖所需的方法。

  class MockFile extends Mock implements File {
  @override
  Future<File> writeAsBytes(List<int> bytes, {FileMode mode = FileMode.write, bool flush = false}) {
    // TODO: implement writeAsBytes
    throw UnimplementedError();
  }
}

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 2020-06-17
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多