我正在使用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()只是不起作用。有谁知道这是一个现有的错误,还是我错过了一步?