单元测试介绍
我们如何保证 app 在增加了新特性或者改变了现有功能之后还能正常工作呢?答案是写测试!
使用单元测试可轻松地验证单个函数、方法或类的行为。
test
这个 package 提供了写单测的核心框架,
flutter_test
package 则提供了额外的功能来测试 widget。
本教程将会为大家演示 test
package 的用法,内容如下:
-
将
test
或者flutter_test
加入依赖; -
创建测试文件;
-
创建一个要测试的类;
-
为创建的类写一个测试;
-
整合多个测试到一个
group
; -
执行测试。
关于 package 测试的更多内容,可移步至 test package 的文档。
1. 添加测试依赖
#如果 Dart package 没有依赖 Flutter,可以导入 test
package。
Test package 提供了编写测试所需要的核心功能。当我们写的 package 需要被 web、服务端和 Flutter app 使用时,这是最佳的方式。
运行 flutter pub add
将 test
添加为依赖:
flutter pub add dev:test
2. 创建测试文件
#本例中,我们会创建两个文件:counter.dart
和 counter_test.dart
。
counter.dart
文件包含一个位于 lib
文件夹的待测试类,而位于 test
文件夹的 counter_test.dart
文件将包含测试本身。
通常测试文件应位于放置在 Flutter 应用或包的根目录下的 test
文件夹。测试文件通常以 _test.dart
命名,这是 test runner 寻找测试文件的惯例。
创建完成后,文件目录结构如下:
counter_app/
lib/
counter.dart
test/
counter_test.dart
3. 创建一个要测试的类
#下一步,我们需要一个「单元」来测试。记住:「单元」是一个抽象的名称,它可以表示一个函数、方法或者类。本例中,我们会在 lib/counter.dart
文件中创建一个 Counter
类。它负责增加或减少一个从 0
开始的 value
。
class Counter {
int value = 0;
void increment() => value++;
void decrement() => value--;
}
注意: 为了简化内容,本教程没有遵守「测试驱动开发」的写法。如果你擅长那种开发模式,当然可以选择用那种方式来写。
4. 为创建的类写一个测试
#我们将在 counter_test.dart
文件中写第一个测试。使用顶级函数 test
来定义,可通过执行顶级函数 expect
来检查结果正确与否。这两个函数都来自 test
这个 package。
// Import the test package and Counter class
import 'package:counter_app/counter.dart';
import 'package:test/test.dart';
void main() {
test('Counter value should be incremented', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
}
5. 整合多个测试到一个 group
#
如果你想运行多个有关联或者一个系列的测试,可以使用 test
package 提供的 group
函数将他们整合到一起。你可以用 flutter test
运行同一个组的所有测试。
import 'package:counter_app/counter.dart';
import 'package:test/test.dart';
void main() {
group('Test start, increment, decrement', () {
test('value should start at 0', () {
expect(Counter().value, 0);
});
test('value should be incremented', () {
final counter = Counter();
counter.increment();
expect(counter.value, 1);
});
test('value should be decremented', () {
final counter = Counter();
counter.decrement();
expect(counter.value, -1);
});
});
}
6. 执行测试
#现在 Counter
类和它的测试都有了,开始执行测试!
用 IntelliJ 或 VSCode 执行测试
#IntelliJ 和 VSCode 的 Flutter 插件支持执行测试。用这种方式执行测试是最好的,因为它可以提供最快的反馈闭环,而且还支持断点调试。
-
IntelliJ
-
打开文件
counter_test.dart
-
前往 Run > Run 'tests in counter_test.dart'。你也可以用键盘快捷键运行测试。
-
-
VSCode
-
打开文件
counter_test.dart
-
前往 Run > Start Debugging。你也可以用键盘快捷键运行测试。
-
在终端执行测试
#你也可以打开终端,在工程根目录输入以下命令来执行所有测试:
flutter test test/counter_test.dart
你可以运行以下命令执行所以放在指定 group
里的测试:
flutter test --plain-name "Test start, increment, decrement"
该例子使用的是在 第 5 小节 创建的 group
。
你可以执行下面的命令获得更多有关单元测试的帮助:
flutter test --help
除非另有说明,本文档之所提及适用于 Flutter 的最新稳定版本,本页面最后更新时间: 2024-04-27。 查看文档源码 或者 为本页面内容提出建议。