gpt4 book ai didi

flutter - 在 flutter 中测试/模拟文件IO

转载 作者:行者123 更新时间:2023-12-04 04:12:17 25 4
gpt4 key购买 nike

我有一个简单的测试:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

Future<void> main() async {
testWidgets(
'Simple empty test',
(WidgetTester tester) async {
print("1");
await Directory('/tmp').exists();
print("2");
await tester.pumpWidget(Container());
},
);
}

打印后卡住 1 .我知道 Flutter 在伪异步区域中运行测试,并且我知道我需要使用带有 runAsync 的真实 IO 运行代码。

但是,是否也可以以某种方式注入(inject)模拟 IO 文件系统并在没有 runAsync 的情况下运行测试?

最佳答案

在做了一些研究后,我发现了 file 来自 google 团队的软件包,它允许开发人员使用 LocalFileSystem (基本上是 dart:io ),一个 MemoryFileSystem或自定义 FileSystem .
尤其是 MemoryFileSystem甚至是自定义 FileSystem可以用于单元和小部件测试,因为可以使用它们,因此不会在硬盘驱动器上创建文件。因此,创建和清理 FileSystem 会容易得多。测试运行后。
这种方法的缺点是必须注入(inject) FileSystem进入需要访问文件、目录等的每个模块。
示例

import 'package:file/file.dart';

class DirectoryOperator {
final FileSystem fileSystem;

// Inject implementation of the FileSystem
DirectoryOperator({required this.fileSystem});

Future<void> methodOperatingOnFileSystem(String path) async {
Directory directory = fileSystem.directory(path);
await directory.create(recursive: true);
}
}
测试码
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:flutter_test/flutter_test.dart';

main() {
test('$DirectoryOperator creates directory on path', () async {
FileSystem fileSystem = MemoryFileSystem();
var systemUnderTest = DirectoryOperator(fileSystem: fileSystem);
String testPath = 'Path/to/dir';
await systemUnderTest.methodOperatingOnFileSystem(testPath);

bool doesDirectoryExist = await fileSystem.directory(testPath).exists();
expect(
doesDirectoryExist,
isTrue,
);
});
}

关于flutter - 在 flutter 中测试/模拟文件IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com