Flutte中简化 Dart/Flutter 中行为驱动开发(BDD)的包 bdd_framework的使用

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 Flutter

Flutte中简化 Dart/Flutter 中行为驱动开发(BDD)的包 bdd_framework的使用

简介

bdd_framework 是一个支持和简化 Dart/Flutter 中行为驱动开发(BDD)的包。BDD是一种开发技术,它使你能够构建全面、文档良好、测试充分且易于调整的代码。它增强了开发者与业务利益相关者(包括项目经理、产品经理、产品负责人、业务分析师、QA工程师、测试人员,有时甚至是客户)之间的协作。

尽管 BDD 有许多优点,但并非所有公司都采用它。原因之一是传统的 BDD 框架往往会使过程变得复杂,导致开发者不愿意编写 BDDs。为了简化这一过程并鼓励更多开发者使用 BDD,bdd_framework 应运而生。

以下是 bdd_framework 的一些特点:

  • 可以完全在代码中创建 BDD 测试,无需 .feature 文件。
  • 以开发者为中心,主要满足开发者的需要。
  • 支持导出 Gherkin/Cucumber .feature 文件,以便业务利益相关者查看。
  • 不需要“胶水文件”或胶水代码来从 .feature 文件中提取信息。
  • 不使用生成的代码,可以跳过包含 build_runner 包。
  • 提供清晰、彩色且易于理解的错误消息,支持 TDD。
  • 用户友好,适合个人开发者和团队。
  • 鼓励编写更多的 BDDs,简化编写过程。
  • 使用 Gherkin 语法(其他语法也有可能通过适配使用)。

安装

首先,在 pubspec.yaml 文件中添加依赖:

dependencies:
  bdd_framework: ^latest_version

然后运行 flutter pub get 来安装包。

示例代码

创建一个简单的 BDD 测试

假设我们要实现以下 BDD:

Feature: Buying and Selling Stocks

  Scenario: Buying stocks.

    Given The user has 120 dollars in cash-balance.
    And IBM price is 30 dollars.
    And The user has no IBM stocks.

    When The user buys 1 IBM.

    Then The user now has 1 IBM.
    And The cash-balance is now 90 dollars.

可以在 bdd_buy_and_sell.dart 文件中将此描述转换为代码:

import 'package:bdd_framework/bdd_framework.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  var feature = BddFeature('Buying and Selling Stocks');

  Bdd(feature)
      .scenario('Buying stocks.')
      .given('The user has 120 dollars in cash-balance.')
      .and('IBM price is 30 dollars.')
      .and('The user has no IBM stocks.')
      .when('The user buys 1 IBM.')
      .then('The user now has 1 IBM.')
      .and('The cash-balance is now 90 dollars.')
      .run((ctx) async {
    state = AppState.initialState();

    // Given:
    state.portfolio.cashBalance.set(120.00);
    var ibm = state.availableStocks.findBySymbol('IBM');
    ibm.setCurrentPrice(30.00);
    state.portfolio.clearStock('IBM');

    // When:
    state.portfolio.buy(ibm);

    // Then:
    expect(state.portfolio.howManyStocks('IBM'), 1);
    expect(state.portfolio.cashBalance, CashBalance(90.00));
  });
}

运行所有 BDD 测试

要运行所有 BDD 测试,可以在 test 目录下创建一个 run_all.dart 文件,并列出所有 BDD 文件:

import 'package:bdd_framework/bdd_framework.dart';
import 'package:flutter_test/flutter_test.dart';

import 'bdd_average_price.dart' as bdd_average_price;
import 'bdd_buy_and_sell.dart' as bdd_buy_and_sell;

void main() async {
  BddReporter.set(
    ConsoleReporter(),
    FeatureFileReporter(clearAllOutputBeforeRun: true),
  );

  group('bdd_buy_and_sell.dart', bdd_buy_and_sell.main);
  group('bdd_average_price.dart', bdd_average_price.main);

  await BddReporter.reportAll();
}

插件支持

如果你使用 IntelliJ IDE,可以安装 Marcelo’s Flutter Dart Essentials 插件来增强对 bdd_framework 的支持。该插件增强了代码可读性,使得区分 BDD 各部分更加容易。

总结

bdd_framework 通过简化 BDD 编写过程,使得开发者更容易编写和维护高质量的测试用例。它不仅提高了代码的质量,还促进了开发者与业务利益相关者之间的协作。希望这篇介绍能帮助你更好地理解和使用 bdd_framework


更多关于Flutte中简化 Dart/Flutter 中行为驱动开发(BDD)的包 bdd_framework的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutte中简化 Dart/Flutter 中行为驱动开发(BDD)的包 bdd_framework的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter社区中,虽然bdd_framework这个插件的具体定义和功能可能是未定义的或者相对冷门,但基于插件名称bdd_framework(Behavior-Driven Development 框架的缩写),我们可以合理推测这个插件可能与行为驱动开发(BDD)相关,或者是一个用于构建自定义Flutter框架的工具。

由于无法直接获取到bdd_framework插件的具体实现细节,以下是一个基于Flutter插件开发的一般流程和假设性的代码示例,展示如何在Flutter项目中集成和使用一个自定义框架插件(这里以假设性的bdd_framework为例)。

假设性的bdd_framework插件使用示例

1. 添加插件依赖

首先,你需要在pubspec.yaml文件中添加对bdd_framework(假设已发布到pub.dev)的依赖:

dependencies:
  flutter:
    sdk: flutter
  bdd_framework: ^x.y.z  # 替换为实际版本号

然后运行flutter pub get来安装依赖。

2. 导入插件并使用其功能

假设bdd_framework插件提供了一个用于行为驱动开发的步骤定义和测试运行器,以下是一个如何使用这些功能的示例代码:

import 'package:flutter/material.dart';
import 'package:bdd_framework/bdd_framework.dart'; // 假设插件的导入路径

void main() {
  // 初始化BDD框架(假设有初始化方法)
  BDDFramework.initialize();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('BDD Framework Demo'),
        ),
        body: Center(
          child: BDDFeatureDemo(),
        ),
      ),
    );
  }
}

class BDDFeatureDemo extends StatefulWidget {
  @override
  _BDDFeatureDemoState createState() => _BDDFeatureDemoState();
}

class _BDDFeatureDemoState extends State<BDDFeatureDemo> {
  @override
  void initState() {
    super.initState();
    
    // 假设有一个定义测试步骤的方法
    BDDFramework.defineStep('Given I have a pending task', (context) {
      // 实现步骤逻辑
      print('Step: Given I have a pending task');
    });

    BDDFramework.defineStep('When I complete the task', (context) {
      // 实现步骤逻辑
      print('Step: When I complete the task');
    });

    BDDFramework.defineStep('Then the task should be marked as complete', (context) {
      // 实现步骤逻辑
      print('Step: Then the task should be marked as complete');
      // 这里可以添加断言来验证状态
    });

    // 运行测试场景
    BDDFramework.runScenario('Completing a task', [
      'Given I have a pending task',
      'When I complete the task',
      'Then the task should be marked as complete',
    ]);
  }

  @override
  Widget build(BuildContext context) {
    return Text('BDD Framework is running tests...');
  }
}

注意:上述代码是一个高度假设性的示例,因为实际的bdd_framework插件可能会有完全不同的API和用法。这个示例旨在展示如何在Flutter应用中集成和使用一个假设性的自定义框架插件。

3. 调试和测试

在实际开发中,你需要根据bdd_framework插件的文档和API来调整代码,以确保其正确集成到你的Flutter项目中,并实现所需的功能。

由于bdd_framework的具体细节未知,建议查阅该插件的官方文档或源代码(如果可用)以获取准确的使用指南和API参考。如果这是一个私有或内部插件,你可能需要联系插件的开发者或维护者以获取更多信息。

回到顶部