unit-testing - Dart/Flutter:在测试套件之间共享常用的 setUp/tearDown 方法
问题描述
有没有办法在 Dart/Flutter 的测试中共享常用的 setUp/tearDown 方法和其他辅助方法?通常在其他语言/框架中,如 Java 或 Python,测试是在可以扩展的类中定义的,但是 Dart 通过在 main 方法中使用函数来进行测试的方式让我感到困惑。例如,我正在测试 io 方法,我的测试中有以下代码:
Directory tempDir;
setUp(() async {
tempDir = await Directory.systemTemp.createTemp();
const MethodChannel('plugins.flutter.io/path_provider').setMockMethodCallHandler((MethodCall methodCall) async {
if (methodCall.method == 'getApplicationDocumentsDirectory') {
return tempDir.path;
}
return null;
});
});
tearDown(() async {
tempDir.delete(recursive: true);
});
如果它是任何其他语言,我会创建一个基类或一个 mixin TempDirTestCase
,在其中放置用于创建/删除临时目录的代码,那么每个需要这些功能的套件都必须从它继承......但是我应该在 dart/flutter 中做什么来重用代码并避免复制/粘贴?
解决方案
在与您的测试相同的目录中创建一个名为的文件flutter_test_config.dart
(或在更高级别,它将影响该目录及以下目录中的所有测试)。
在该文件中,您可以在测试文件的方法运行之前调用setUp
and方法:tearDown
main
import 'dart:async';
import 'package:flutter_test/flutter_test.dart';
Future<void> main(FutureOr<void> Function() testMain) async {
setUp(() {
print('Shared setUp');
});
tearDown(() {
print('Shared tearDown');
});
await testMain();
}
文档:https ://api.flutter.dev/flutter/flutter_test/flutter_test-library.html
推荐阅读
- printf - OCaml 中的 Printf 参数
- mysql - 如何实现用户关系自定义的全文搜索
- javascript - 如何解决 Amplify backend-config.jason 不存在问题
- python - 调整窗口大小时,Tkinter 变慢。我可以在用户安顿下来而不是连续激活它时激活调整大小命令吗?
- python - 如何使用 Keras 从二值图像分类模型中获取类?
- sql - 我应该怎么办?怎么了 ?错误(“缺少 VALUES 关键字”)
- java - Java:使用 selenium + phantomjs 进行网页抓取
- flutter - 使用颤振在视频播放器中显示 kinesis 流视频
- javascript - 在网站上注册之前添加条件和条款
- php - 在一个循环中打印多个数组项 PHP