首页 > 解决方案 > 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 中做什么来重用代码并避免复制/粘贴?

标签: unit-testingtestingflutterdart

解决方案


在与您的测试相同的目录中创建一个名为的文件flutter_test_config.dart(或在更高级别,它将影响该目录及以下目录中的所有测试)。

在该文件中,您可以在测试文件的方法运行之前调用setUpand方法:tearDownmain

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


推荐阅读