当使用glib测试框架时,g_test_set_nonfatal_assertions()仍然被中止(核心转储)

时间:2014-03-26 17:51:17

标签: c testing glib

我正在使用glib测试框架编写测试。他们有断言,例如g_assert_true,在他们的文档中说:

  

调试宏以检查表达式是否为true。   如果断言失败(即表达式不为真),则会记录一条错误消息,并终止应用程序或将测试用例标记为失败。   请参阅g_test_set_nonfatal_assertions()。

g_test_set_nonfatal_assertions()定义为:

  

更改g_assert_cmpstr(),g_assert_cmpint(),g_assert_cmpuint(),g_assert_cmphex(),g_assert_cmpfloat(),g_assert_true(),g_assert_false(),g_assert_null(),g_assert_no_error(),g_assert_error(),g_test_assert_expected_messages()的行为以及各种g_test_trap_assert _ *()宏不会中止编程,而是调用g_test_fail()并继续。 (这也会改变g_test_fail()的行为,以便在完成失败的测试后不会导致测试程序中止。)请注意,g_assert_not_reached()和g_assert()不受此影响。此功能只能在g_test_init()之后调用。

这意味着通过调用g_test_set_nonfatal_assertions而不是关闭它的测试程序应该继续运行,它应该继续运行并将测试用例标记为失败。但是我有以下代码片段:

    void test_subscribe(mfixture* mf, gconstpointer ignored)
{
    g_assert_true(FALSE);
}

void test_test(mfixture* mf, gconstpointer ignored)
{
}


int main(int argc, char **argv){ 
    g_test_init(&argc, &argv, NULL);
    g_test_set_nonfatal_assertions ();

    g_test_add ("/set1/subscribe test", mfixture, NULL,message_setup, test_subscribe, message_teardown); 
    g_test_add ("/set1/test test", mfixture, NULL,message_setup, test_test, message_teardown); 


    return g_test_run(); 
}

我得到以下输出:

  

错误:HubSubscriptions_test.c:32:test_subscribe:FALSE   make: * [test-all] aborted(core dumped)

根据文档,您可能希望它不会被中止。在我看来,g_test_set_nonfatal_assertions()只是不起作用。有谁知道这是一个现有的错误,还是我错过了一步?

1 个答案:

答案 0 :(得分:2)

a known issue如果没有在单独的流程中实际运行每个单独的测试单元,就无法轻松修复。