简单的问题:是否可以显示由CUnit测试新测试的变量的内容?Printf() 在测试期间不显示,无论如何我不想使用它。例如,我希望 CUnit 输出的结果
(MQUEUE_PRI_MASK & flag)
可能吗?以下是CUnit的当前输出:
Suite: Message Queue Test
Test: mqueue_init ...passed
Test: mqueue : Test send & rcv functions ...passed
Test: mqueue : Test mqueue priority ...passed
Test: mqueue : Test mqueue flags ...0FAILED
1. utils/test_mqueue.c:117 - CU_ASSERT_EQUAL((MQUEUE_PRI_MASK & flag ),MQUEUE_PRI_HIGH)
Test: mqueue_free ...passed
预期成果 :
Suite: Message Queue Test
Test: mqueue_init ...passed
Test: mqueue : Test send & rcv functions ...passed
Test: mqueue : Test mqueue priority ...passed
Test: mqueue : Test mqueue flags ...0FAILED
1. utils/test_mqueue.c:117 - CU_ASSERT_EQUAL(5 ,MQUEUE_PRI_HIGH)
Test: mqueue_free ...passed
谢谢!
断言宏是不可能的,但编写自己的宏并不难。查看 中的宏定义。您可能必须编写自己的 CU_assertImplementation() 变体。使用原始源作为模板。
为了给 @lars-ljung 的最后一个答案添加颜色,下面是一个测试整数值的 CU_ASSERT_EQUAL() 的替换示例,称为 CU_ASSERT_INT_EQUAL()。 将其放入 ,并在测试整数值时使用它代替标准 CU_ASSERT_EQUAL()。
您需要为长整数、双精度、字符串等编写类似的宏。
把它放在CUnit/CUnit.h的顶部:
#define CU_BUFFER_SIZE 1024
把它放在CUnit/CUnit.h中,也许就在现有的CU_ASSERT_EQUAL定义旁边:
#define CU_ASSERT_INT_EQUAL(actual, expected)
{ char buffer[CU_BUFFER_SIZE];
snprintf(buffer, CU_BUFFER_SIZE, "CU_ASSERT_INT_EQUAL(%s (%d), %s (%d))", ""#actual"", actual, ""#expected"", expected);
CU_assertImplementation(((actual) == (expected)), __LINE__, buffer, __FILE__, CU_FUNC, CU_FALSE); }
这将在输出中生成如下消息:
测试用例
测试用例中的断言的使用方式就像您通常使用它一样:
CU_ASSERT_INT_EQUAL(function_error, SUCCESS);
输出
Suite: foo
Test: test_my_failing_test ...FAILED
1. :....testfootest_foo.c:122 - CU_ASSERT_INT_EQUAL(function_error (4), SUCCESS (0))
Test: test_my_passing_test ...passed