测试生命周期与分组
在 Dart 测试中,合理地组织测试用例并管理它们的生命周期(初始化与销毁)是保持测试代码整洁、高效的关键。我们通过 group 来分类,通过 setUp 和 tearDown 来控制环境。
group: 将相关的测试组织在一起。组内可以嵌套组,形成树状结构。setUp: 在每个测试用例执行前运行,用于初始化数据库、实例化类等。- tearDown: 在每个测试用例执行后运行,用于关闭流、清空临时文件等。
setUpAll: 在该组的所有测试开始前运行一次,通常用于耗时的全局初始化(如启动服务器)。tearDownAll: 在该组的所有测试结束后运行一次。
// lifecycle_test.dart
import 'package:test/test.dart';
void main() {
// 全局生命周期
setUpAll(() {
print('>> 🚀 启动全局模拟服务器');
});
tearDownAll(() {
print('>> 🛑 关闭全局模拟服务器');
});
group('用户模块测试', () {
late Map<String, String> userData;
// 组内生命周期:每个测试运行前都会重置数据
setUp(() {
print(' -- 准备用户测试数据');
userData = {'id': '1', 'name': 'Alice'};
});
tearDown(() {
print(' -- 清理用户测试数据');
userData.clear();
});
test('数据初始化正确', () {
expect(userData['name'], 'Alice');
});
test('可以修改用户名', () {
userData['name'] = 'Bob';
expect(userData['name'], 'Bob');
});
// 嵌套组
group('权限检查', () {
setUp(() {
print(' --- 额外添加权限标签');
userData['role'] = 'admin';
});
test('管理员权限校验', () {
expect(userData['role'], 'admin');
});
});
});
}
/* Debug Output:
>> 🚀 启动全局模拟服务器
-- 准备用户测试数据
-- 清理用户测试数据
✓ 用户模块测试 数据初始化正确
-- 准备用户测试数据
-- 清理用户测试数据
✓ 用户模块测试 可以修改用户名
-- 准备用户测试数据
--- 额外添加权限标签
-- 清理用户测试数据
✓ 用户模块测试 权限检查 管理员权限校验
>> 🛑 关闭全局模拟服务器
*/