Flutter编写测试插件expector的使用

Flutter编写测试插件expector的使用

由于expector插件在Flutter中的介绍为undefined,这里以“未知功能”代替。实际上,expector并不是一个Flutter特有的插件,而是一个用于简化Dart测试代码编写的库。它提供了一种更流畅的方式来编写测试用例,通过内容辅助(content assist)提高编码效率和准确性。

简介

Build Status

expector包旨在以更加流畅的方式编写测试,减少了直接使用expect(value, matcher)时需要手动提供的匹配器。用户只需要调用expectThat(value),然后利用内容辅助完成后续操作。

使用方法

下面是一个简单的使用示例:

import 'package:expector/expector.dart';
import 'package:test/test.dart';

String? f() => 'hello';

void main() {
  test('f() returns a 5-length string', () {
    expectThat(f()).isNotNull
      ..isNotEmpty
      ..hasLength(5);
  });
}

示例代码

接下来是包含更多场景的完整示例demo:

import 'package:expector/expector.dart';
import 'package:test/test.dart';

String? f() => 'hello';
String? g() => throw StateError('bad');

void main() {
  // 测试函数f返回一个长度为5的非空字符串
  test('f() returns a 5-length string', () {
    expectThat(f()).isNotNull
      ..isNotEmpty
      ..hasLength(5);
  });

  // 测试函数g抛出StateError异常,并且错误信息包含'bad'
  test('g() throws a StateError', () async {
    (await expectThat(g).throws)
        .isA<StateError>()
        .satisfies((error) => error.message.contains('bad'));
  });
}

test包的问题

test包允许用户通过匹配器描述期望值:expect(value, matcher)。不幸的是,存在大量的匹配器,这使得选择合适的匹配器变得困难,而且如果选择了不适用于被测值的匹配器,在编译时不会报错,但在运行时可能会引发问题。此外,test包没有提供内容辅助来帮助用户找到正确的匹配器。

例如:

import 'package:test/test.dart';

String? f() => 'hello';

void main() {
  test('f() returns a 5-length string', () {
    expect(f(), isNotNull);
    expect(f(), isNotEmpty);
    expect(f(), hasLength(5));
    expect(f(), isNaN); // 这一行在编译时不会报错,但在运行时会失败
  });
}

上述例子中最后一行试图检查一个字符串是否为NaN,这是不合逻辑的操作,但编译器并不会阻止这种写法,直到运行时才会发现问题。

许可证

expector采用Apache 2.0许可证发布。


综上所述,虽然expector并非专门针对Flutter开发的功能插件,但对于任何使用Dart进行开发的项目来说,它都能极大地提升测试代码的质量和编写效率。希望这个解释能帮助你更好地理解如何在自己的项目中应用expector


更多关于Flutter编写测试插件expector的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部