Flutter行为驱动开发插件gherkin的使用
Flutter行为驱动开发插件gherkin的使用
dart_gherkin
是一个功能齐全的Gherkin解析器和测试运行器,适用于Flutter和Dart 2。它遵循Cucumber的各种实现方式,并提供了特定于Flutter的功能来帮助进行应用程序测试。
以下是关于如何在Flutter项目中使用gherkin
插件的详细指南和示例代码。
快速入门
创建特征文件
首先创建一个名为 test
的文件夹,在该文件夹内创建一个名为 features
的文件夹,然后创建一个名为 calculator_can_add.feature
的文件。
Feature: Calculator
Tests the addition feature of the calculator
Scenario: Add two numbers
Given the numbers 1.5 and 2.1
When they are added
Then expected result is 3.6
实现步骤定义
步骤定义是特征文件中的文本步骤的编码表示。每个步骤以 Given
、Then
、When
、And
或 But
开头。
例如,实现一个给定步骤:
import 'package:gherkin/gherkin.dart';
import '../worlds/custom_world.world.dart';
StepDefinitionGeneric GivenTheNumbers() {
return given2<num, num, CalculatorWorld>(
'the numbers {num} and {num}',
(input1, input2, context) async {
context.world.calculator.storeNumericInput(input1);
context.world.calculator.storeNumericInput(input2);
},
);
}
配置测试运行
创建一个名为 test.dart
的文件,并将以下代码放入其中:
import 'dart:async';
import 'package:gherkin/gherkin.dart';
import 'supporting_files/steps/given_the_numbers.step.dart';
import 'supporting_files/steps/then_expect_numeric_result.step.dart';
import 'supporting_files/steps/when_numbers_are_added.step.dart';
import 'supporting_files/worlds/custom_world.world.dart';
Future<void> main() {
final steps = [
givenTheNumbers(),
whenTheStoredNumbersAreAdded(),
thenExpectNumericResult()
];
final config = TestConfiguration.standard(
steps,
hooks: [HookExample()],
customStepParameterDefinitions: [PowerOfTwoParameter()],
createWorld: (config) => Future.value(CalculatorWorld()),
);
return GherkinRunner().execute(config);
}
运行测试:
dart test.dart
配置说明
配置对象指定了要运行的内容以及运行所使用的类(如步骤、钩子和报告器)。配置参数包括:
features
: 指定要运行的特征文件的位置。tagExpression
: 定义基于标签的特性场景运行。order
: 场景执行顺序。defaultLanguage
: 特征文件的默认语言。stepDefinitions
: 自定义步骤定义类实例。customStepParameterDefinitions
: 自定义步骤参数定义。hooks
: 钩子类实例。reporters
: 报告器类实例。createWorld
: 创建自定义世界上下文对象的方法。
示例Demo
以下是一个完整的示例,展示如何使用 gherkin
插件编写和运行BDD测试。
特征文件 (calculator_can_add.feature
)
Feature: Calculator
Tests the addition feature of the calculator
Scenario: Add two numbers
Given the numbers 1.5 and 2.1
When they are added
Then expected result is 3.6
步骤定义 (given_the_numbers.step.dart
)
import 'package:gherkin/gherkin.dart';
import '../worlds/custom_world.world.dart';
StepDefinitionGeneric GivenTheNumbers() {
return given2<num, num, CalculatorWorld>(
'the numbers {num} and {num}',
(input1, input2, context) async {
context.world.calculator.storeNumericInput(input1);
context.world.calculator.storeNumericInput(input2);
},
);
}
测试运行配置 (test.dart
)
import 'dart:async';
import 'package:gherkin/gherkin.dart';
import 'supporting_files/steps/given_the_numbers.step.dart';
import 'supporting_files/steps/then_expect_numeric_result.step.dart';
import 'supporting_files/steps/when_numbers_are_added.step.dart';
import 'supporting_files/worlds/custom_world.world.dart';
Future<void> main() {
final steps = [
givenTheNumbers(),
whenTheStoredNumbersAreAdded(),
thenExpectNumericResult()
];
final config = TestConfiguration.standard(
steps,
hooks: [HookExample()],
customStepParameterDefinitions: [PowerOfTwoParameter()],
createWorld: (config) => Future.value(CalculatorWorld()),
);
return GherkinRunner().execute(config);
}
运行测试
在命令行中运行以下命令:
dart pub get
cd example
dart test.dart
这将运行 features
文件夹中的特征文件。
通过以上步骤,您可以轻松地在Flutter项目中使用 gherkin
插件进行行为驱动开发。希望这个指南对您有所帮助!
更多关于Flutter行为驱动开发插件gherkin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter行为驱动开发插件gherkin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用Gherkin插件进行行为驱动开发(BDD)可以帮助你以自然语言编写测试用例,从而使测试更加直观和易于理解。以下是一个关于如何在Flutter项目中使用Gherkin插件的示例代码案例。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加Gherkin和相关依赖:
dependencies:
flutter:
sdk: flutter
flutter_test:
sdk: flutter
dev_dependencies:
gherkin: ^x.y.z # 请替换为最新版本号
test: ^1.x.x # 确保版本与Gherkin兼容
运行flutter pub get
来安装这些依赖。
2. 配置Gherkin
在test
目录下创建一个gherkin
文件夹,并在其中创建一个config
文件夹。在config
文件夹中创建一个名为gherkin.dart
的文件,用于配置Gherkin。
// test/gherkin/config/gherkin.dart
import 'package:gherkin/gherkin.dart';
import 'package:flutter_gherkin/flutter_gherkin.dart';
import 'package:flutter_driver/flutter_driver.dart';
Future<void> main() {
final FlutterWorld world = FlutterWorld();
final GherkinConfig config = GherkinConfig()
..featureDirectory = 'test/gherkin/features'
..stepDefinitions = [
// 添加你的步骤定义文件
StepDefinitionFile()..addStepDefinitions(<String, dynamic>{
'I am on the home page': (context) async => world.navigateToHomePage(),
// 其他步骤定义...
}),
// 可以添加更多步骤定义文件
]
..customParameterDefinitions = [
// 自定义参数定义(如果需要)
]
..reporterConfig = ReporterConfig(
reportOn: ReportLevel.scenario,
customReportBuilders: [],
reportBuilders: [
JsonReportBuilder(),
// 其他报告生成器...
],
)
..hooks = <Hook>[
// 钩子函数(如:在每个场景开始前/后执行的操作)
];
return GherkinRunner().execute(config);
}
3. 创建特性文件
在test/gherkin/features
目录下创建一个特性文件,例如example.feature
。
# test/gherkin/features/example.feature
Feature: Navigation
Scenario: User navigates to the home page
Given I am on the home page
Then I should see the welcome message
4. 实现步骤定义
在test/gherkin/step_definitions
目录下创建一个Dart文件,例如navigation_steps.dart
,并实现步骤定义。
// test/gherkin/step_definitions/navigation_steps.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:gherkin/gherkin.dart';
import 'package:flutter_gherkin/flutter_gherkin.dart';
class NavigationSteps extends DefaultStepDefinitions {
@override
Future<void> registerSteps(World world) async {
var flutterWorld = world as FlutterWorld;
given1<String>(
'I am on the home page',
(String _, StepExecutionContext context) async {
await flutterWorld.navigateToHomePage();
},
);
then1<String>(
'I should see the welcome message',
(String _, StepExecutionContext context) async {
final Finder welcomeMessageFinder = find.text('Welcome');
expect(await flutterWorld.driver.waitFor(welcomeMessageFinder), findsOneWidget);
},
);
}
}
5. 实现FlutterWorld类
在test/gherkin/world.dart
文件中实现FlutterWorld
类,用于封装与Flutter相关的操作。
// test/gherkin/world.dart
import 'package:flutter_driver/flutter_driver.dart';
import 'package:gherkin/gherkin.dart';
class FlutterWorld extends World {
late FlutterDriver driver;
@override
Future<void> initialize() async {
// 初始化FlutterDriver
driver = await FlutterDriver.connect();
}
@override
Future<void> dispose() async {
// 关闭FlutterDriver
if (driver != null) {
driver?.close();
}
}
Future<void> navigateToHomePage() async {
// 实现导航到首页的逻辑
await driver.tap(find.byTooltip('Home')); // 示例代码,根据实际情况调整
}
}
6. 运行测试
在命令行中运行以下命令来执行Gherkin测试:
flutter pub run test_coverage
或者,如果你使用的是VSCode,可以通过配置launch.json来运行测试。
注意:确保你的Flutter环境已经正确配置,并且你的设备或模拟器已经启动。
这个示例展示了如何在Flutter项目中使用Gherkin插件进行行为驱动开发。你可以根据自己的需求扩展步骤定义和特性文件。