Red/System 快速测试框架详解

Red/System 快速测试框架详解

red Red is a next-generation programming language strongly inspired by Rebol, but with a broader field of usage thanks to its native-code compiler, from system programming to high-level scripting and cross-platform reactive GUI, while providing modern support for concurrency, all in a zero-install, zero-config, single ~1MB file! red 项目地址: https://gitcode.com/gh_mirrors/re/red

概述

Red/System Quick-Test 是一个专为 Red 和 Red/System 设计的轻量级测试框架。它最初是为了支持 Red/System 的"自举"版本开发而快速构建的,因此具有简单高效的特点。该框架不仅能够快速执行测试,还能让开发者快速编写有意义的测试用例。

框架特点

  1. 轻量级设计:框架代码量小,专注于核心测试功能
  2. 快速执行:测试运行速度快,适合持续集成环境
  3. 多语言支持:支持 Red、Red/System 和 REBOL 测试
  4. 简单易用:提供直观的测试语法,学习成本低

测试类型支持

Quick-Test 支持多种测试类型:

  1. 代码功能测试:直接测试 Red 或 Red/System 代码功能
  2. 程序测试:测试完整的 Red 和 Red/System 程序
  3. 编译器行为测试:验证 Red/System 编译器的正确性
  4. Red 编译器测试:验证 Red 编译器的行为
  5. REBOL 单元测试(临时支持):用于 Red 编译器自举阶段的测试

核心组件

Quick-Test 由以下几个关键组件构成:

  1. quick-test.r:REBOL 脚本,支持测试编译器和可执行文件输出
  2. quick-test.reds:Red/System 测试函数集
  3. quick-test.red:Red 测试函数集
  4. quick-unit-test.r:REBOL 单元测试函数集(临时组件)
  5. run-all.r:运行测试套件的主脚本
  6. 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/         # 基础语言测试

运行测试

基本命令

  1. 运行所有 Red 和 Red/System 测试:

    rebol -s run-all.r
    

    或在 REBOL 控制台中:

    do %run-all.r
    
  2. 运行所有 Red 测试:

    rebol -s tests/run-all.r
    
  3. 运行所有 Red/System 测试:

    rebol -s system/tests/run-all.r
    
  4. 运行单个测试文件:

    rebol -s quick-test/run-test.r "system/tests/source/units/logic-test.reds"
    

高级选项

  1. 使用二进制编译器运行测试

    rebol -qs run-all.r --binary <编译器路径>
    
  2. 批处理模式(适合脚本调用):

    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 测试指令
  1. ***start-run*** <标题>:开始测试运行
  2. ~~~start-file~~~ <标题>:开始测试文件
  3. ===start-group=== <标题>:开始测试组
  4. --test-- <标题>:定义单个测试
  5. --assert <表达式>:基本断言
  6. --assertf~= <值1> <值2> <容差>:浮点数近似相等断言
  7. ===end-group===:结束测试组
  8. ~~~end-file~~~:结束测试文件
  9. ***end-run***:结束测试运行
REBOL 测试指令

REBOL 测试指令除了包含上述功能外,还增加了:

  1. --compile <文件>:编译源文件
  2. --compile-this <代码>:编译字符串形式的代码
  3. --compile-and-run <文件>:编译并运行程序
  4. --compile-run-print <文件>:编译、运行并打印输出

测试最佳实践

  1. 合理分组:使用 ===start-group=== 将相关测试组织在一起
  2. 明确命名:为每个测试和测试组使用描述性名称
  3. 单一断言:每个测试最好只验证一个功能点
  4. 清理资源:使用 --clean 指令清理临时文件
  5. 错误处理:对预期会出错的测试使用 /error 修饰符

局限性

  1. 文件位置敏感:对测试文件的位置有一定要求
  2. 容错性有限:错误处理机制较为简单
  3. 功能精简:仅提供基本测试功能,缺少高级特性

总结

Red/System Quick-Test 作为一个轻量级测试框架,虽然功能简单,但足以满足 Red 和 Red/System 开发的基本测试需求。它的简洁设计使得编写和执行测试都非常高效,特别适合在开发过程中快速验证代码的正确性。随着 Red 语言的发展,这个测试框架可能会被更完善的解决方案取代,但在当前阶段,它仍然是 Red 生态系统中的重要工具。

red Red is a next-generation programming language strongly inspired by Rebol, but with a broader field of usage thanks to its native-code compiler, from system programming to high-level scripting and cross-platform reactive GUI, while providing modern support for concurrency, all in a zero-install, zero-config, single ~1MB file! red 项目地址: https://gitcode.com/gh_mirrors/re/red

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羿亚舜Melody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值