C语言 显示 ASSERTed 变量的内容



简单的问题:是否可以显示由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

最新更新