我将单元测试放在运行在 Hudson 上的 C 中,但是当我有一个失败的测试时,它表明构建成功,但必须显示为失败!
我正在使用 gcc 在 hudson 中编译和运行可执行文件,如下所示:
gcc -lcunit test_ctesting.c -o testing
./testing
它在 shell 命令中,如何获取失败并显示它?
您可以使用 CUnit XML 来报告测试结果。然后使用 Jenkins 中的"发布 JUnit 测试结果报告"来显示结果。
请参阅 XML 输出的自动化:http://cunit.sourceforge.net/doc/running_tests.html#automated
你可以告诉CUnit按照Bjerking的建议自动运行。
默认情况下,它会生成一个名为 CUnitAutomated-Results.xml 的 Xml 。
必须转换此 xml 才能从 Jenkins 中的"发布 JUnit 测试结果报告"任务中读取。
步骤:
-
在您的测试程序(即test.c(调用
CU_automated_run_tests((;
-
使用如下命令从 Jenkins 创建并调用您的测试程序:
。/测试
- 获取 CUnit-to-JUnit 转换并将其放在构建计算机上
-
使用 cunit-to-junit.xsl.xml将 CUnitAutomated-Results 转换为 Test-Result.xml:
xsltproc --novalid ../build/cunit-to-junit.xsl CUnitAutomated-Results.xml> test-results.xml
-
添加"发布 JUnit 测试结果报告"任务并指向:
测试结果.xml
现在,当您构建项目时,您可以获得:
- 如果所有测试均为绿色,则成功
- 如果至少有一个故障,则不稳定
- 完整的测试结果趋势
我不确定这是否是您要查找的,但是 CUnit 示例代码是这样做的:
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return CU_get_error();
我现在不记得 CU_get_error(( 返回的确切内容,但如果测试失败,它不会返回非零值。如果你想弄清楚这一点,你需要返回失败的测试次数:
unsigned int num_failures;
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
num_failures = CU_get_number_of_failures();
CU_cleanup_registry();
return num_failures;
我不确定 Hudson/Jenkins 如何处理这个问题,但非零返回值将使 CMake/CTest 不报告通过的测试。
退出代码存储在变量 $?
中,我假设如果测试失败,它被设置为非零值。
。无论如何,如果它是Unixy的东西。