Appearance
参数化测试
本章介绍 Anvil 的参数化测试功能,用于自动生成多个测试用例。
概述
参数化测试允许你用一个测试函数定义多个测试用例。Anvil 会自动为每组参数生成独立的测试。
c
// 一个函数,8 个测试用例
__attribute__((test_method, params(n = boundary(uint8))))
int test_byte_boundary(int n) {
return validate_byte(n) == (n >= 0 && n <= 255);
}核心特性
边界值自动生成
使用 boundary(type) 自动生成边界值:
c
params(n = boundary(uint8))
// 自动生成:0, 1, 127, 128, 254, 255, -1, 256显式值列表
使用 {...} 指定具体值:
c
params(value = {0, 1, 100, 255, -1})多参数组合
支持多参数的各种组合策略:
c
params(x = {0, 50, 100}, y = {0, 50, 100})
// 默认笛卡尔积:9 个组合组合策略
| 策略 | 说明 | 组合数量 |
|---|---|---|
| 笛卡尔积(默认) | 所有参数的完全组合 | n1 × n2 × ... |
| Pairwise | 任意两参数至少出现一次 | 显著减少 |
| Zip | 按索引配对 | min(n1, n2, ...) |
快速示例
c
/*
* 设计说明:使用边界值测试字节验证
* 预期结果:0-255有效,其他无效
*/
__attribute__((test_method, params(n = boundary(uint8))))
int test_valid_byte(int n) {
int result = is_valid_byte(n);
int expected = (n >= 0 && n <= 255) ? 1 : 0;
return result == expected;
}运行结果:
test_valid_byte[n=0] ........ PASSED
test_valid_byte[n=1] ........ PASSED
test_valid_byte[n=127] ...... PASSED
test_valid_byte[n=128] ...... PASSED
test_valid_byte[n=254] ...... PASSED
test_valid_byte[n=255] ...... PASSED
test_valid_byte[n=-1] ....... PASSED
test_valid_byte[n=256] ...... PASSED