允许在新的集成测试中运行整个测试文件夹——就像普通的单元测试一样
Posted
技术标签:
【中文标题】允许在新的集成测试中运行整个测试文件夹——就像普通的单元测试一样【英文标题】:Allow to run entire folder of tests in flutter new integration tests - just like normal unit tests 【发布时间】:2021-06-18 00:58:32 【问题描述】:我有一个单独的integration test file for each screen,我想用一个命令来运行所有的集成测试,比如“flutter tests”。我查看了文档,但找不到任何方法来做到这一点。这也会导致 firebase 测试实验室 apk 出现问题。要创建一个 android 测试 apk,我只能指定一个测试文件路径来创建 apk。
// flutter build generates files in android/ for building the app
flutter build apk
./gradlew app:assembleAndroidTest
./gradlew app:assembleDebug -Ptarget=integration_test/whattodo_tests.dart
目前,我找到了两种解决方法。
-
我已将所有测试移动到一个带有 group test 的 dart 文件中。
但是这种解决方法不能很好地扩展。对于 5-10 测试,它工作正常。但是假设我们有 50-75 的测试,那么在单个文件中导航和理解测试将是一团糟。
创建一个script 以逐一运行所有测试。这可能适用于我们自己的 CI 管道,但不适用于 firebase 测试实验室。
有没有人能够解决这个问题或任何更好的解决方案?
【问题讨论】:
【参考方案1】:现在有一种更好的方法。只需像这样使用测试命令。
运行所有测试
flutter test integration_test
运行特定的测试
flutter test integration_test/app_test.dart
Reference.
【讨论】:
CI 服务器(如 AppCenter 或 Firebase)不会运行此命令 - 没有通过 adb 的直接连接。您必须构建并提供 app.apk 和 app-test.apk 文件。接受的答案解决了 CI 用例【参考方案2】:我在 GitHub 上遇到过一个项目具有这种结构,我认为这可能会有所帮助..
制作公用文件并在该公用文件上导入不同的文件、文件夹或模块进行测试
main.dart
import 'package:integration_test/integration_test.dart';
import 'about_us_page_test.dart' as about;
import 'add_label_page_test.dart' as label;
import 'add_project_page_test.dart' as project;
import 'add_task_page_test.dart' as tasks;
import 'completed_tasks_page_test.dart' as tasks_completed;
import 'home_page_test.dart' as home;
import 'whattodo_tests.dart' as whattodo;
void main()
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
whattodo.main();
home.main();
tasks.main();
tasks_completed.main();
project.main();
label.main();
about.main();
到run all
这些测试
flutter drive \
--driver=test_driver/integration_test_driver.dart \
--target=integration_test/main.dart
【讨论】:
谢谢。这按预期工作。我们在 main.dart 中不需要IntegrationTestWidgetsFlutterBinding.ensureInitialized();
,因此我们可以将其删除。
是的@BurhanuddinRashid。通常,一旦这种结构到位,我们就不会在每个文件上添加这一行..以上是关于允许在新的集成测试中运行整个测试文件夹——就像普通的单元测试一样的主要内容,如果未能解决你的问题,请参考以下文章
在新的应用程序域中运行时,如何将标准输出转换为 mstest 输出?