我可以在 Flutter 中使用一个配置文件运行多个集成测试吗?

Nem*_*vić 9 integration-testing automated-tests flutter

我正在尝试编写 Flutter 集成测试并使用一个配置文件运行它们,而不是为每个测试都创建配置文件。有没有办法做到这一点?

现在我有 login.dart 和 login_test.dart 等等,用于每个测试。我知道它的约定是每个配置和测试文件必须具有相同的名称,但这不是我需要的,欢迎更多可配置的东西。提前致谢。

这是我的配置文件 (login.dart)

import 'package:flutter_driver/driver_extension.dart';
import 'package:seve/main.dart' as app;

void main() {
enableFlutterDriverExtension();
app.main();
}
Run Code Online (Sandbox Code Playgroud)

测试(login_test.dart)看起来像这样

import ...

FlutterDriver driver;

void main() {

setUpAll(() async {
driver = await FlutterDriver.connect();
});

tearDownAll(() async {
if (driver != null) {
  driver.close();
}
});

test('T001loginAsDriverAndVerifyThatDriverIsLogedInTest', () async {
  some_code...
});
});
Run Code Online (Sandbox Code Playgroud)

现在我想创建新的测试文件(例如 login_warning.dart)并且能够通过调用单个配置文件(login.dart)来启动这两个测试。这甚至可能吗?

sce*_*eee 10

是的,可以使用相同的“配置”运行多个“测试”文件。

在 flutter 行话中,您的配置文件是您的目标,您的测试文件是您的驱动程序。您的目标始终是login.dart但您有两个驱动程序login_test.dartlogin_warning.dart

使用该flutter drive命令,您可以指定target以及driver

所以为了运行这两个驱动程序,只需执行以下命令

flutter drive --target=test_driver/login.dart --driver=test_driver/login_test.dart
flutter drive --target=test_driver/login.dart --driver=test_driver/login_warning.dart
Run Code Online (Sandbox Code Playgroud)

这首先执行驱动程序login_test.dart,然后执行login_warning.dart驱动程序。

  • 真是可悲……而且丑陋。但是,是的,这是唯一的解决方案。 (2认同)

vzu*_*urd 6

您始终可以拥有一个您启动的主要测试文件,例如

flutter drive --target=test_driver/app_test.dart
Run Code Online (Sandbox Code Playgroud)

然后在那个调用你的测试组作为函数,就像这样 -

void main() {
  test1();
}
void test1() {
  group('test 1', () {});}
Run Code Online (Sandbox Code Playgroud)

因此,使用一个命令,您就可以执行中提到的所有情况 main()


小智 6

就像 vzurd 的答案一样,我最喜欢和最干净的是创建一个测试文件并从内部调用所有主要方法:

import './first_test.dart' as first;
import './second_test.dart' as second;

void main() {
  first.main();
  second.main();
}
Run Code Online (Sandbox Code Playgroud)

然后只需在单个测试文件上运行驱动程序:

flutter drive --driver=test/integration/integration_test_driver.dart --target=test/integration/run_all_test.dart
Run Code Online (Sandbox Code Playgroud)

  • 这不会重置两个测试之间的状态 (6认同)