Skip to content

构建选项

Anvil 支持在测试文件末尾通过注释指定编译选项,实现「测试即配置」。

语法格式

在测试文件末尾添加特殊注释:

c
// 测试代码...

// includes: -I../../include -I../../src/module
// flags: -Wall -Wextra -O2
// links: -lm -lpthread
// sources: ../common/mock_db.c
// timeout: 5s

可用选项

includes

头文件搜索路径,传递给编译器的 -I 选项。

c
// includes: -I../include -I../src

路径相对于测试文件

路径是相对于测试文件所在目录的。例如,如果测试文件在 tests/module/test_foo.c,则 ../include 指向 tests/include

flags

传递给编译器的其他标志。

c
// flags: -Wall -Wextra -O2 -DDEBUG

常用标志:

标志说明
-Wall启用常用警告
-Wextra启用额外警告
-O0禁用优化(便于调试)
-O2优化级别 2
-DDEBUG定义 DEBUG 宏
-g生成调试信息

链接器选项,用于链接外部库。

c
// links: -lm -lpthread -lssl

常用库:

选项说明
-lm数学库
-lpthreadPOSIX 线程库
-lsslOpenSSL
-lcrypto加密库

sources

额外的 C 源文件,通常用于 Mock 或 Stub 文件。

c
// sources: ../common/mock_db.c ../common/mock_logger.c

注意

这些源文件会与测试文件一起编译,但不会被自动发现为测试。

timeout

单个测试的超时时间,覆盖全局配置。

c
// timeout: 5s

支持的格式:

格式示例
5s, 30s
毫秒500ms, 1500ms
分钟1m, 2m
混合1m30s

完整示例

c
#include "database.h"
#include "logger.h"

/*
 * 设计说明:测试数据库连接功能
 * 预期结果:使用 Mock 数据库,应返回成功
 */
__attribute__((test_method))
int test_db_connect(void) {
    return db_connect("localhost", 3306) == 0;
}

/*
 * 设计说明:测试日志记录功能
 * 预期结果:日志写入应成功
 */
__attribute__((test_method))
int test_log_write(void) {
    return log_write("test message") == 0;
}

// 头文件路径
// includes: -I../../include -I../../src/database

// 编译标志
// flags: -Wall -DTEST_MODE

// 链接库
// links: -lpthread

// Mock 文件
// sources: ../mocks/mock_database.c ../mocks/mock_logger.c

// 超时设置(数据库操作可能较慢)
// timeout: 10s

多行选项

如果选项很长,可以使用多个注释行:

c
// includes: -I../../include
// includes: -I../../src/module1
// includes: -I../../src/module2

// sources: ../mocks/mock_a.c
// sources: ../mocks/mock_b.c
// sources: ../mocks/mock_c.c

选项优先级

优先级来源
1(最高)测试文件注释
2.anvil 配置文件
3(最低)命令行参数

覆盖规则

测试文件中的选项会追加到全局配置,而不是替换。例如,全局 flags: -Wall,测试文件 flags: -O2,最终使用 -Wall -O2

调试构建选项

使用 -c 选项保留生成的文件,查看实际的编译命令:

bash
anvil -c test_module
cat anvil-compile.log

本页面内容遵循 Luna 软件源代码授权条款 (LSLA) 发布