颤振小部件与颤振驱动程序



我正在为用Flutter编写的移动应用程序编写测试。 我按照这本 Flutter 食谱来测试 Flutter 应用程序,学习如何编写小部件和集成测试。

本教程运行良好,但我仍然坚持自己的集成测试。

为了简化起见,假设我有一个应用程序,只包含一个TextField

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MyAppp',
home: Scaffold(
body: Center(child: TextField()),
),
);
}
}

我想为此应用程序编写一个测试。例如,我想测试以下场景:

  • 打开应用程序
  • 检查TextField是否为空
  • 选择TextField
  • 输入"你好,世界!
  • 检查TextField是否包含"你好,世界!

我写了以下Widget测试,效果很好:

void main() {
testWidgets('TextField behavior', (WidgetTester tester) async {
// Create app
await tester.pumpWidget(MyApp());
// Find TextField, check there is 1
final textFieldFinder = find.byType(TextField);
expect(textFieldFinder, findsOneWidget);
// Retrieve TextField Widget from Finder
TextField textField = tester.widget(textFieldFinder);
// Check TextField is empty
expect(textField.controller.text, equals(""));
// Enter text
await tester.enterText(textFieldFinder, "hello, world!");
// Check TextField contains text
expect(textField.controller.text, equals("hello, world!"));
});
}

这个测试通过了,但我想写一个集成测试,或多或少做同样的事情,以便能够在真实设备上测试它。 事实上,如果这个小部件测试通过,它可能会在所有设备上传递。但是在我的应用程序中,我有更复杂的小部件和它们之间的交互,我希望能够在 Android 和 iOS 上启动测试。

我尝试使用Flutter driver编写集成测试,但我在文档和示例中没有找到我想要的内容。

如何检查Widget属性,以验证我的应用是否按预期运行?

我编写了以下示例:

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
void main() {
group('TextField', () {
final textFieldFinder = find.byType('TextField');
FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
if (driver != null) {
driver.close();
}
});
test('TextField behavior', () async {
// ??? how to check that the TextField is empty
await driver.tap(textFieldFinder);
await driver.enterText("hello, world!");
// ??? how to check that the TextField contains hello, world!
});
});
}

Flutter Cookbook 教程解释了如何通过其文本检索对象,这将有助于检查文本是否存在,但例如是否可以检查容器颜色是否为红色? 小部件和集成测试之间的限制在哪里?

编写 Widget 测试非常简单,但我没有找到很多关于如何使用 Flutter 驱动程序编写更复杂的集成测试的示例或文档。

如果有人感兴趣:

为了能够测试我想要的东西(不仅是小部件的存在,还有他们的状态,它们的属性,...(测试驱动程序对我来说还不够。

我在项目中所做的是使用flutter_test编写小部件测试并检查我想要的属性。

为了在真实设备(Android 或 iOS(上测试它,我使用了此处提供的integration_test包(以前e2e包(,它将flutter_test结果调整为与颤振驱动器兼容的格式。

要使用integration_test,请在小部件测试的主条目中添加此行:

IntegrationTestWidgetsFlutterBinding.ensureInitialized();

然后创建一个文件(例如integration_test.dart( 在包含以下内容的test_driver文件夹中:

import 'package:integration_test/integration_test_driver.dart';
Future<void> main() => integrationDriver();

然后,可以通过运行以下命令启动这些驱动程序测试:

flutter drive 
--driver=test_driver/integration_test.dart 
--target=test/widget_test/widget_test.dart

使用您的小部件测试写入文件test/widget_test/widget_test.dart.

它真的帮助了我,因为某些小部件在Android和iOS上没有相同的行为。

今天,我同时使用flutter_test(在带有integration_test的真实设备上启动(和真实flutter_driver测试:

  • 我编写小部件测试来检查单个小部件或单个页面,
  • 我使用 Flutter 驱动程序编写更复杂的场景来测试整个应用程序。

我认为颤振小部件和颤振驱动程序之间存在差异。其中,颤振小部件用于小部件测试,颤振驱动程序用于集成测试。我不确定这在实际角度上意味着什么,但我认为集成测试更容易对用户进行的应用程序交互运行测试,因为与小部件测试相比,集成测试在实际设备上运行。如果我找到有关此的更多信息,将更新。

相关内容

  • 没有找到相关文章

最新更新