单元测试简介
如何确保在添加更多功能或更改现有功能时,你的应用仍能正常工作?通过编写测试。
单元测试对于验证单个函数、方法或类的行为非常方便。test
包提供了编写单元测试的核心框架,而 flutter_test
包提供了用于测试小部件的额外实用工具。
本教程演示了 test
包提供的核心功能,具体步骤如下:
- 添加
test
或flutter_test
依赖。 - 创建测试文件。
- 创建一个待测试类。
- 为我们的类编写一个
test
。 - 在一个
group
中组合多个测试。 - 运行测试。
有关 test
包的更多信息,请参阅 test 包文档。
1. 添加测试依赖
#test
包提供了在 Dart 中编写测试的核心功能。这是编写供 Web、服务器和 Flutter 应用使用的包时的最佳方法。
要将 test
包添加为开发依赖项,请运行 flutter pub add
flutter pub add dev:test
2. 创建测试文件
#在此示例中,创建两个文件:counter.dart
和 counter_test.dart
。
counter.dart
文件包含一个你要测试的类,它位于 lib
文件夹中。counter_test.dart
文件包含测试本身,它位于 test
文件夹内。
通常,测试文件应位于 Flutter 应用程序或包根目录下的 test
文件夹中。测试文件应始终以 _test.dart
结尾,这是测试运行器在搜索测试时使用的约定。
完成后,文件夹结构应如下所示:
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
包。
// 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
中组合多个测试
#如果你想运行一系列相关的测试,请使用 flutter_test
包的 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
文件 - 转到 运行 > 运行 'counter_test.dart 中的测试'。你也可以按下适用于你平台的相应键盘快捷键。
- 打开
VSCode
- 打开
counter_test.dart
文件 - 转到 运行 > 开始调试。你也可以按下适用于你平台的相应键盘快捷键。
- 打开
在终端中运行测试
#要在终端中运行所有测试,请从项目根目录运行以下命令:
flutter test test/counter_test.dart
要运行你放入一个 group
中的所有测试,请从项目根目录运行以下命令:
flutter test --plain-name "Test start, increment, decrement"
此示例使用了在第 5 节中创建的 group
。
要了解有关单元测试的更多信息,你可以执行此命令:
flutter test --help