Flutter插件zam_test的使用_zam_test是 test 包的一个类型化的版本

Flutter插件zam_test的使用_zam_test是 test 包的一个类型化的版本

zam_testtest 包的一个类型化的版本。

包含的功能

包含以下核心组件:

详细查看所有组件 在这里

如何使用Flutter插件zam_test

概要

  • Test 是主类。它有两个构造方法,分别是 Test.singleTest.multi。如果测试简单且只有一个用例,则使用 Test.single
  • TestCase 是包装在 Test.multi 中的。避免直接使用 TestCase
  • TestGroup 用于一起运行多个 Test

Test

Test 可以看作是原始 test 包中的 test() 函数的类型化版本。大多数情况下,Test 将基于不同的输入有多个用例。例如,登录测试可能基于不同的输入(如错误的用户名、错误的密码、正确的用户名和密码等)有不同的测试用例。Test 也可以有一个单一的测试用例。因此,我们分别使用 MultiCasedTestSingleCasedTest 来处理这些情况。

你可以通过以下步骤创建一个新的测试:

  1. 创建一个扩展 Test 的类。
  2. 提供一个 name
  3. 覆写 run 函数,该函数在每个 TestCase 运行时被调用。
  4. 提供一个 cases 列表。
  5. 在需要时覆写 initializedispose
  6. 你还可以自定义 nameSuffixdescription
class HeightTest extends Test<double, String> {
  [@override](/user/override)
  final name = 'Height';

  [@override](/user/override)
  run(input) {
    return Height(input).toStringInMetre();
  }

  [@override](/user/override)
  final cases = [
    NegativeTestCase(
      when: 'Negative height value',
      input: -23,
      exception: HeightNotValidException,
    ),
    NegativeTestCase(
      when: 'Zero height value',
      input: 0,
      exception: HeightNotValidException,
    ),
    ValueTestCase(
      when: 'Positive Border height value',
      then: 'outputs value in m',
      input: 1,
      output: '0.01 m',
    ),
  ];
}

void main() {
  HeightTest().execute();
}

TestGroup

TestGroup 用于一起运行多个 Test。它是一个更实用的类。你可以不使用这个类来运行测试。

void main() {
  TestGroup('BMI', [
    HeightTest(),
    // WeightTest(),
    // HeightTest(),
    // BmiCategoryTest(),
    // ...
    // ...
    // ... (你可以在这里添加更多的测试组)
  ]).execute();
}

TestCase

它接受两个描述性文本 whenthen,一个 input,一个 matcher,以及一个可选的回调 action

注意:即使你想运行一个单独的测试用例,也应考虑将其放在 Test 类中,这可以通过使用 Test.single 构造方法实现。

执行 TestCase 的简单方式如下:

void main() {
  ValueTestCase(
    when: 'Positive Border height value',
    then: 'outputs value in m',
    input: 1.0,
    output: '0.01 m',
    action: (double input) => Height(input).toStringInMetre(),
  ).execute();
}

目前我们提供了以下从 TestCase 衍生的测试用例类型。我们希望未来这个列表会增长以处理各种场景。在那之前,你可以使用 TestCase,因为它接受一个自定义匹配器。

更多了解,请移步到 示例部分 或查看这些在 GitHub 上的 例子

自定义

你可以覆盖以下内容:

  • TestCase -> descriptionDelimiter - 默认为 ' -&gt; '
  • TestCase -> description - 它是由 whenthen 文本结合而成的,中间用 descriptionDelimiter 分隔。
  • Test -> nameSuffix - 默认为 ':'
  • Test -> description - 它是由 namenameSuffix 结合而成的。
  • TestGroup -> nameSuffix - 默认为 ' -'
  • TestGroup -> description - 它是由 namenameSuffix 结合而成的。

状态

Build

贡献者

许可证

BSD 3-Clause License


示例代码

main.dart

import 'package:zam_test/utilities.dart';
import 'package:zam_test/zam_test.dart';

///
/// [TestGroup] 用于一起运行多个 [Test]。
///
void main() {
  TestGroup('BMI', [
    HeightTest(),
    HeightCanCreateTest(),
    // ...
    // ...
    // ... (你可以在这里添加更多的测试)
  ]).execute();

  // 另外一种写法如下。
  // HeightTest().execute();
  // 但是当有很多测试时,[TestGroup] 会很有帮助。
}

///
/// 创建一个扩展 [Test] 的类。
/// 提供一个 [name]。(如果没有提供,默认为类名。在这个例子中,它是 'HeightTest')
/// 你可以选择性地覆写 [nameSuffix] 和 [description]。
/// 当需要时覆写 [initialize] 和 [dispose]。
/// 覆写 [run] 函数,该函数在每个 [TestCase] 运行时被调用。
/// 提供一个 [testCases] 列表。
///
class HeightTest extends Test<double, String> {
  [@override](/user/override)
  final name = 'Height';

  /// 在第一个 [TestCase] 运行前运行一次。
  /// [sleep] 是这个包中的一个工具函数。
  [@override](/user/override)
  initialize() async {
    await sleep(seconds: 1);
  }

  /// 该函数在每个 [TestCase] 运行时被调用。
  [@override](/user/override)
  run(input) {
    return Height(input).toStringInMetre();
  }

  /// 在最后一个 [TestCase] 运行后运行一次。
  /// [shutdown] 是这个包中的一个工具函数。
  [@override](/user/override)
  dispose() async {
    await shutdown(seconds: 1);
  }

  /// 提供所有的 [TestCase] 列表。
  ///
  /// 这里有一些不同类型的测试用例。
  ///   [TestCase] - 基础类,期望一个输入和一个匹配器。
  ///   [ValueTestCase] - 期望一个输入和一个输出。
  ///   [NegativeTestCase] - 期望一个输入和一个异常类型。
  ///   [BooleanTestCase] - 期望一个输入和输出根据构造函数设置。
  [@override](/user/override)
  final cases = [
    NegativeTestCase(
      when: 'Negative height value',
      input: -23,
      exception: HeightNotValidException,
    ),
    NegativeTestCase(
      when: 'Negative Border height value',
      input: -1,
      exception: HeightNotValidException,
    ),
    NegativeTestCase(
      when: 'Zero height value',
      input: 0,
      exception: HeightNotValidException,
    ),
    ValueTestCase(
      when: 'Positive Border height value',
      then: 'outputs value in m',
      input: 1,
      output: '0.01 m',
    ),
    ValueTestCase(
      when: 'Positive height value',
      then: 'outputs value in m',
      input: 45,
      output: '0.45 m',
    ),
    ValueTestCase(
      when: 'Positive Extreme height value',
      then: 'outputs value in m',
      input: 834,
      output: '8.34 m',
    ),
  ];
}

class HeightCanCreateTest extends Test<double, bool> {
  [@override](/user/override)
  bool run(double input) {
    return Height.canCreate(input);
  }

  [@override](/user/override)
  final cases = [
    BooleanTestCase.truthy(
      when: 'Positive height value',
      input: 45,
    ),
    BooleanTestCase.falsy(
      when: 'Negative height value',
      input: -22,
    ),
  ];
}

class Height {
  final double value;
  double get valueInMetre => value / 100;

  static bool canCreate(double value) => value > 0;

  Height(double value)
      : value = value > 0 ? value : throw HeightNotValidException(value);

  [@override](/user/override)
  String toString() {
    return '${value.round()} cm';
  }

  String toStringInMetre() {
    return '${valueInMetre.toStringAsFixed(2)} m';
  }
}

class HeightNotValidException implements Exception {
  final double value;

  const HeightNotValidException(this.value);

  [@override](/user/override)
  String toString() {
    return '$runtimeType: $value is an invalid height value. Height should be positive.';
  }
}

更多关于Flutter插件zam_test的使用_zam_test是 test 包的一个类型化的版本的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件zam_test的使用_zam_test是 test 包的一个类型化的版本的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,zam_test 并不是一个常见的或官方维护的插件,因此其功能和用法可能并不为大多数开发者所熟知。如果你在某个项目或文档中遇到了 zam_test 插件,以下是一些探索和使用它的步骤和建议:

1. 查找官方文档或源代码

首先,尝试找到 zam_test 插件的官方文档或源代码。通常,Flutter插件会发布在 pub.dev 上,你可以通过搜索 zam_test 来查看是否有相关的插件信息。

flutter pub search zam_test

如果找到该插件,查看其文档、README 文件以及示例代码,了解其功能和用法。

2. 查看插件的源代码

如果 zam_test 插件没有发布在 pub.dev 上,你可以尝试查找其源代码。通常,插件的源代码可能托管在 GitHub 或 GitLab 等代码托管平台上。你可以通过以下方式查找:

  • 在 GitHub 上搜索 zam_test 插件。
  • 查看项目中 pubspec.yaml 文件的 dependencies 部分,可能包含插件的源代码链接。

3. 分析 pubspec.yaml 文件

在项目的 pubspec.yaml 文件中,查找 zam_test 插件的依赖项,看看是否有版本号或源代码链接。例如:

dependencies:
  zam_test: ^1.0.0

如果有版本号,可以通过 flutter pub get 命令获取插件。

4. 阅读插件的 README 和示例代码

如果找到了插件的源代码,通常会有一个 README.md 文件,里面会详细描述插件的功能、用法和示例代码。阅读这些内容可以帮助你快速上手。

5. 尝试在项目中使用

根据文档或示例代码,尝试在项目中引入并使用 zam_test 插件。例如:

import 'package:zam_test/zam_test.dart';

void main() {
  // 使用 zam_test 插件的功能
}
回到顶部