NovaProva单元测试框架未检测测试求助(x86自定义Linux平台)
我之前帮同行排查过类似自定义编译NovaProva的问题,给你几个实用的排查方向:
检查测试函数命名是否匹配规则
从你的调试日志能看到NovaProva用的分类器是/^test_([a-z0-9].*)/,也就是说测试函数必须以小写test_开头,后面跟小写字母或数字。如果你的测试函数是Test_Init或者testMyFunc这种格式,肯定匹配不上,得改成test_init或者test_myfunc这类严格符合规则的命名。确认编译链接环节是否正确
自定义构建的NovaProva,要确保测试程序的编译链接步骤没问题:- 编译时有没有包含NovaProva的头文件?要么代码里手动写
#include <novaprova.h>,要么编译命令加-include novaprova.h; - 链接时有没有加上NovaProva的库?编译命令末尾要加
-lnovaprova; - 有没有启用动态符号导出?NovaProva需要动态识别测试符号,编译测试程序时要加
-rdynamic(GCC)或者对应编译器的符号导出选项,否则测试函数符号会被隐藏,NovaProva找不到。
- 编译时有没有包含NovaProva的头文件?要么代码里手动写
查看完整的调试日志
你给出的日志被截断了(np: ad...),建议把完整的调试输出贴出来,重点看有没有类似np: loading module ./your_test_program、np: scanning symbols、np: found symbol test_xxx这类日志。如果看不到符号扫描到测试函数的记录,基本可以确定是符号没导出或者编译链接出了问题。验证NovaProva构建的正确性
从零构建时,有没有确保开启了必要的功能?比如:- 运行
configure时有没有针对x86架构做正确配置?比如./configure --host=i686-linux-gnu(如果是32位x86); - 构建过程中有没有报错或警告?比如缺少
libelf或dl这类依赖,会导致NovaProva无法读取符号表;
可以尝试重新构建一次,仔细看构建日志,确保所有依赖都满足,关键功能(比如符号扫描)都被编译进去。
- 运行
用最小测试用例验证
写一个极简的测试程序快速验证:#include <novaprova.h> void test_minimal() { NP_ASSERT_TRUE(1); }编译命令:
gcc -o test_minimal test_minimal.c -lnovaprova -rdynamic
然后运行测试:./testrunner ./test_minimal
如果这个最小用例能被识别到,那问题出在你原来的测试代码里;如果还是识别不到,那肯定是NovaProva的构建有问题,得重新检查构建步骤。
内容的提问来源于stack exchange,提问作者Abhayadev S

