⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check_check_fixture.c

📁 c unit test framework
💻 C
字号:
#include <stdlib.h>#include <signal.h>#include <stdio.h>#include <string.h>#include <check.h>#include "check_error.h"#include "check_str.h"#include "check_check.h"static char errm[200];static void fixture_sub_setup (void){  fail("Test failure in fixture");}static SRunner *fixture_sr;void setup_fixture (void){  TCase *tc;  Suite *fixture_s;    fixture_s = suite_create("Fix Sub");  tc = tcase_create("Core");  tcase_add_unchecked_fixture(tc, fixture_sub_setup, NULL);  suite_add_tcase (fixture_s, tc);  fixture_sr = srunner_create(fixture_s);  srunner_run_all(fixture_sr,CK_SILENT);}void teardown_fixture (void){  srunner_free(fixture_sr);}START_TEST(test_fixture_fail_counts){  int nrun, nfail;  nrun = srunner_ntests_run(fixture_sr);  nfail = srunner_ntests_failed(fixture_sr);  fail_unless (nrun == 0 && nfail == 1,	       "Counts for run and fail for fixture failure not correct");}END_TESTSTART_TEST(test_print_counts){  char *srstat = sr_stat_str(fixture_sr);  const char *exp = "0%: Checks: 0, Failures: 1, Errors: 0";  fail_unless(strcmp(srstat, exp) == 0,	      "SRunner stat string incorrect with setup failure");}END_TESTSTART_TEST(test_setup_failure_msg){  TestResult **tra;  char *trm;  const char *trmexp = "check_check_fixture.c:14:S:Core:unchecked_setup: Test failure in fixture";  tra = srunner_failures(fixture_sr);  trm = tr_str(tra[0]);  if (strstr(trm, trmexp) == 0) {    snprintf(errm, sizeof(errm),	     "Bad setup tr msg (%s)", trm);        fail (errm);  }  }END_TESTint testval = 1;static void sub_ch_setup_norm (void){  testval = 2;}static void sub_ch_teardown_norm(void){  testval = 10;}START_TEST(test_sub_ch_setup_norm){  if (testval == 1)    fail("Setup not run correctly");  else if (testval > 2)    fail("Test side-effects persist across runs");  testval++;}END_TESTSTART_TEST(test_ch_setup){  TCase *tc;  Suite *s;  SRunner *sr;  s = suite_create("Fixture Norm Sub");  tc = tcase_create("Core");  sr = srunner_create(s);  suite_add_tcase(s, tc);  tcase_add_test(tc,test_sub_ch_setup_norm);  tcase_add_test(tc,test_sub_ch_setup_norm);  tcase_add_checked_fixture(tc,sub_ch_setup_norm,sub_ch_teardown_norm);  srunner_run_all(sr, CK_SILENT);  fail_unless(srunner_ntests_failed(sr) == 0,	      "Checked setup not being run correctly");  srunner_free(sr);}END_TESTstatic void setup_sub_fail (void){  fail("Failed setup");}static void teardown_sub_fail (void){  fail("Failed teardown");}static void setup_sub_signal (void){  mark_point();  raise(SIGFPE);}static void teardown_sub_signal(void){  mark_point();  raise(SIGFPE);}START_TEST(test_sub_fail){  fail("Should never run");}END_TESTSTART_TEST(test_sub_pass){  fail_unless(1 == 1, "Always pass");}END_TESTSTART_TEST(test_ch_setup_fail){  TCase *tc;  Suite *s;  SRunner *sr;  char *strstat;  char *trm;  s = suite_create("Setup Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc,test_sub_fail);  tcase_add_checked_fixture(tc,setup_sub_fail, NULL);  sr = srunner_create(s);  srunner_run_all(sr,CK_SILENT);  fail_unless (srunner_ntests_run(sr) == 0,	       "Test run counts not correct for checked setup failure");  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked setup failure");  strstat= sr_stat_str(sr);  fail_unless(strcmp(strstat,		     "0%: Checks: 0, Failures: 1, Errors: 0") == 0,	      "SRunner stat string incorrect with checked setup failure");  trm = tr_str(srunner_failures(sr)[0]);  if (strstr(trm,	     "check_check_fixture.c:127:S:Core:test_sub_fail: Failed setup")      == 0) {    snprintf(errm, sizeof(errm),	     "Bad failed checked setup tr msg (%s)", trm);        fail (errm);  }}END_TESTSTART_TEST(test_ch_setup_fail_nofork){  TCase *tc;  Suite *s;  SRunner *sr;  s = suite_create("Setup Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc, test_sub_fail);  tcase_add_checked_fixture(tc, setup_sub_fail, NULL);  sr = srunner_create(s);  srunner_set_fork_status(sr, CK_NOFORK);  srunner_run_all(sr, CK_SILENT);  fail_unless (srunner_ntests_run(sr) == 0,	       "Test run counts not correct for checked setup failure");  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked setup failure");}END_TESTSTART_TEST(test_ch_setup_fail_nofork_2){  TCase *tc;  Suite *s;  SRunner *sr;  s = suite_create("Setup Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc, test_sub_fail);  tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);  tcase_add_checked_fixture(tc, setup_sub_fail, NULL);  sr = srunner_create(s);  srunner_set_fork_status(sr, CK_NOFORK);  srunner_run_all(sr, CK_SILENT);  fail_unless (srunner_ntests_run(sr) == 0,	       "Test run counts not correct for checked setup failure");  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked setup failure");}END_TESTSTART_TEST(test_ch_setup_pass_nofork){  TCase *tc;  Suite *s;  SRunner *sr;  s = suite_create("Setup Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc, test_sub_pass);  tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);  tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);  tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);  sr = srunner_create(s);  srunner_set_fork_status(sr, CK_NOFORK);  srunner_run_all(sr, CK_SILENT);  fail_unless (srunner_ntests_run(sr) == 1,	       "Test run counts not correct for checked setup failure");  fail_unless (srunner_ntests_failed(sr) == 0,	       "Failure counts not correct for checked setup failure");}END_TESTSTART_TEST(test_ch_setup_sig){  TCase *tc;  Suite *s;  SRunner *sr;  char *strstat;  char *trm;  s = suite_create("Setup Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc,test_sub_fail);  tcase_add_checked_fixture(tc,setup_sub_signal, NULL);  sr = srunner_create(s);  srunner_run_all(sr,CK_SILENT);  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked setup signal");  fail_unless (srunner_ntests_run(sr) == 0,	       "Test run counts not correct for checked setup signal");  strstat= sr_stat_str(sr);  fail_unless(strcmp(strstat,		     "0%: Checks: 0, Failures: 0, Errors: 1") == 0,	      "SRunner stat string incorrect with checked setup signal");  trm = tr_str(srunner_failures(sr)[0]);  if (strstr(trm,	     "check_check_fixture.c:137:S:Core:test_sub_fail: "	     "(after this point) Received signal 8")      == 0) {    snprintf(errm, sizeof(errm),	     "Msg was (%s)", trm);        fail (errm);  }}END_TESTSTART_TEST(test_ch_teardown_fail){  TCase *tc;  Suite *s;  SRunner *sr;  char *strstat;  char *trm;  s = suite_create("Teardown Fail");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc,test_sub_pass);  tcase_add_checked_fixture(tc,NULL, teardown_sub_fail);  sr = srunner_create(s);  srunner_run_all(sr,CK_SILENT);  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked teardown failure");  fail_unless (srunner_ntests_run(sr) == 1,	       "Test run counts not correct for checked teardown failure");  strstat= sr_stat_str(sr);  fail_unless(strcmp(strstat,		     "0%: Checks: 1, Failures: 1, Errors: 0") == 0,	      "SRunner stat string incorrect with checked setup failure");  trm = tr_str(srunner_failures(sr)[0]);  if (strstr(trm,	     "check_check_fixture.c:132:S:Core:test_sub_pass: Failed teardown")      == 0) {    snprintf(errm, sizeof(errm),	     "Bad failed checked teardown tr msg (%s)", trm);        fail (errm);  }  }END_TESTSTART_TEST(test_ch_teardown_sig){  TCase *tc;  Suite *s;  SRunner *sr;  char *strstat;  char *trm;  s = suite_create("Teardown Sig");  tc = tcase_create("Core");  suite_add_tcase(s, tc);  tcase_add_test(tc,test_sub_pass);  tcase_add_checked_fixture(tc,NULL, teardown_sub_signal);  sr = srunner_create(s);  srunner_run_all(sr,CK_SILENT);  fail_unless (srunner_ntests_failed(sr) == 1,	       "Failure counts not correct for checked teardown signal");  fail_unless (srunner_ntests_run(sr) == 1,	       "Test run counts not correct for checked teardown signal");  strstat= sr_stat_str(sr);  fail_unless(strcmp(strstat,		     "0%: Checks: 1, Failures: 0, Errors: 1") == 0,	      "SRunner stat string incorrect with checked teardown signal");  trm = tr_str(srunner_failures(sr)[0]);  if (strstr(trm,	     "check_check_fixture.c:143:S:Core:test_sub_pass: "	     "(after this point) Received signal 8")      == 0) {    snprintf(errm, sizeof(errm),	     "Bad msg (%s)", trm);        fail (errm);  }  }END_TESTSuite *make_fixture_suite (void){  Suite *s;  TCase *tc;  s = suite_create("Fixture");  tc = tcase_create("Core");  suite_add_tcase (s, tc);  tcase_add_test(tc,test_fixture_fail_counts);  tcase_add_test(tc,test_print_counts);  tcase_add_test(tc,test_setup_failure_msg);  tcase_add_test(tc,test_ch_setup);  tcase_add_test(tc,test_ch_setup_fail);  tcase_add_test(tc,test_ch_setup_fail_nofork);  tcase_add_test(tc,test_ch_setup_fail_nofork_2);  tcase_add_test(tc,test_ch_setup_pass_nofork);  tcase_add_test(tc,test_ch_setup_sig);  tcase_add_test(tc,test_ch_teardown_fail);  tcase_add_test(tc,test_ch_teardown_sig);  return s;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -