Red/System 快速测试框架详解
概述
Red/System Quick-Test 是一个专为 Red 和 Red/System 设计的轻量级测试框架。它最初是为了支持 Red/System 的"自举"版本开发而快速构建的,因此具有简单高效的特点。该框架不仅能够快速执行测试,还能让开发者快速编写有意义的测试用例。
框架特点
- 轻量级设计:框架代码量小,专注于核心测试功能
- 快速执行:测试运行速度快,适合持续集成环境
- 多语言支持:支持 Red、Red/System 和 REBOL 测试
- 简单易用:提供直观的测试语法,学习成本低
测试类型支持
Quick-Test 支持多种测试类型:
- 代码功能测试:直接测试 Red 或 Red/System 代码功能
- 程序测试:测试完整的 Red 和 Red/System 程序
- 编译器行为测试:验证 Red/System 编译器的正确性
- Red 编译器测试:验证 Red 编译器的行为
- REBOL 单元测试(临时支持):用于 Red 编译器自举阶段的测试
核心组件
Quick-Test 由以下几个关键组件构成:
- quick-test.r:REBOL 脚本,支持测试编译器和可执行文件输出
- quick-test.reds:Red/System 测试函数集
- quick-test.red:Red 测试函数集
- quick-unit-test.r:REBOL 单元测试函数集(临时组件)
- run-all.r:运行测试套件的主脚本
- run-test.r:运行单个测试的脚本
目录结构规范
Quick-Test 对项目目录结构有特定要求:
Red/
├── run-all.r # 运行所有测试
├── quick-test/ # 测试框架组件
│ ├── quick-test.r
│ ├── quick-test.reds
│ ├── quick-unit-test.r
│ ├── run-test.r
│ └── runnable/ # 自动生成的测试可执行文件目录
├── tests/ # Red 测试
│ ├── run-all.r
│ └── source/
│ ├── compiler/ # 编译器单元测试
│ └── runtime/ # 运行时测试
└── system/
└── tests/ # Red/System 测试
├── run-all.r
└── source/
├── compiler/ # 编译器测试
├── run-time/ # 运行时库测试
└── units/ # 基础语言测试
运行测试
基本命令
-
运行所有 Red 和 Red/System 测试:
rebol -s run-all.r
或在 REBOL 控制台中:
do %run-all.r
-
运行所有 Red 测试:
rebol -s tests/run-all.r
-
运行所有 Red/System 测试:
rebol -s system/tests/run-all.r
-
运行单个测试文件:
rebol -s quick-test/run-test.r "system/tests/source/units/logic-test.reds"
高级选项
-
使用二进制编译器运行测试:
rebol -qs run-all.r --binary <编译器路径>
-
批处理模式(适合脚本调用):
rebol -qs run-all.r --batch
此模式下仅返回 0(成功)或 1(失败),不显示详细输出。
编写测试
基本测试结构
Quick-Test 提供了简单的断言函数和测试组织函数。以下是 Red/System 测试示例:
Red/System [
Title: "测试示例"
File: %example-test.reds
]
#include %../../quick-test/quick-test.reds
~~~start-file~~~ "示例测试"
===start-group=== "基本测试"
--test-- "加法测试"
a: 1
b: 2
--assert 3 = a + b
===end-group===
~~~end-file~~~
测试指令详解
Red/System 测试指令
***start-run*** <标题>
:开始测试运行~~~start-file~~~ <标题>
:开始测试文件===start-group=== <标题>
:开始测试组--test-- <标题>
:定义单个测试--assert <表达式>
:基本断言--assertf~= <值1> <值2> <容差>
:浮点数近似相等断言===end-group===
:结束测试组~~~end-file~~~
:结束测试文件***end-run***
:结束测试运行
REBOL 测试指令
REBOL 测试指令除了包含上述功能外,还增加了:
--compile <文件>
:编译源文件--compile-this <代码>
:编译字符串形式的代码--compile-and-run <文件>
:编译并运行程序--compile-run-print <文件>
:编译、运行并打印输出
测试最佳实践
- 合理分组:使用
===start-group===
将相关测试组织在一起 - 明确命名:为每个测试和测试组使用描述性名称
- 单一断言:每个测试最好只验证一个功能点
- 清理资源:使用
--clean
指令清理临时文件 - 错误处理:对预期会出错的测试使用
/error
修饰符
局限性
- 文件位置敏感:对测试文件的位置有一定要求
- 容错性有限:错误处理机制较为简单
- 功能精简:仅提供基本测试功能,缺少高级特性
总结
Red/System Quick-Test 作为一个轻量级测试框架,虽然功能简单,但足以满足 Red 和 Red/System 开发的基本测试需求。它的简洁设计使得编写和执行测试都非常高效,特别适合在开发过程中快速验证代码的正确性。随着 Red 语言的发展,这个测试框架可能会被更完善的解决方案取代,但在当前阶段,它仍然是 Red 生态系统中的重要工具。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考