C g_test_set_nonfatal_断言()在使用glib测试框架时仍然中止(核心转储)

C g_test_set_nonfatal_断言()在使用glib测试框架时仍然中止(核心转储),c,testing,glib,C,Testing,Glib,我正在使用glib测试框架编写测试。他们有像g_assert_true这样的断言,在他们的文档中说: 调试宏以检查表达式是否为真。 如果断言失败(即表达式不为true),则会记录一条错误消息,并终止应用程序或将testcase标记为失败。 请参阅g_test_set_nonfatal_断言() g_test_set_nonfatal_assertions()定义为: 将g_assert_cmpstr()、g_assert_cmpint()、g_assert_cmpuint()、g_assert_

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

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

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_assert_预期_消息()和各种g_test_trap_assert*宏的行为更改为不中止程序,而是调用g_test_fail()并继续。(这也会更改g_test_fail()的行为,以便在完成失败的测试后不会导致测试程序中止。)请注意,g_assert_not_reach()和g_assert()不受此影响。此函数只能在g_test_init()之后调用

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

    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\u test.c:32:test\u subscribe:FALSE make::[全部测试]中止(堆芯转储)

考虑到文档,您希望它不会被中止。在我看来,g_test_set_nonfatal_assertions()就是不起作用。有人知道这是一个现存的bug,还是我遗漏了一个步骤吗?

如果不在一个单独的过程中运行每个单独的测试单元,就很难修复它