首页 > 解决方案 > 如何在 Dart 中模拟 File 的实例

问题描述

我想模拟这个方法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, []);
    });

  });

标签: flutterunit-testingdartmockito

解决方案


使用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();
  }
}

推荐阅读