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

📄 automated.c

📁 linux 下 C程序单元测试,可以实现交互模式和静态模式
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (NULL != pTempFailure->strCondition) {        CU_translate_special_characters(pTempFailure->strCondition, szTemp, sizeof(szTemp));      }      else {        szTemp[0] = '\0';      }      fprintf(f_pTestResultFile,              "        <CUNIT_RUN_TEST_RECORD> \n"              "          <CUNIT_RUN_TEST_FAILURE> \n"              "            <TEST_NAME> %s </TEST_NAME> \n"              "            <FILE_NAME> %s </FILE_NAME> \n"              "            <LINE_NUMBER> %u </LINE_NUMBER> \n"              "            <CONDITION> %s </CONDITION> \n"              "          </CUNIT_RUN_TEST_FAILURE> \n"              "        </CUNIT_RUN_TEST_RECORD> \n",              (NULL != pTest->pName) ? pTest->pName : "",              (NULL != pTempFailure->strFileName) ? pTempFailure->strFileName : "",              pTempFailure->uiLineNumber,              szTemp);      pTempFailure = pTempFailure->pNext;    }  }  else {    fprintf(f_pTestResultFile,            "        <CUNIT_RUN_TEST_RECORD> \n"            "          <CUNIT_RUN_TEST_SUCCESS> \n"            "            <TEST_NAME> %s </TEST_NAME> \n"            "          </CUNIT_RUN_TEST_SUCCESS> \n"            "        </CUNIT_RUN_TEST_RECORD> \n",            (NULL != pTest->pName) ? pTest->pName : "");  }}/*------------------------------------------------------------------------*//** Handler function called at completion of all tests in a suite. *  @param pFailure Pointer to the test failure record list. */static void automated_all_tests_complete_message_handler(const CU_pFailureRecord pFailure){  CU_pTestRegistry pRegistry = CU_get_registry();  CU_pRunSummary pRunSummary = CU_get_run_summary();  CU_UNREFERENCED_PARAMETER(pFailure);  /* not used */  assert(NULL != pRegistry);  assert(NULL != pRunSummary);  assert(NULL != f_pTestResultFile);  if ((NULL != f_pRunningSuite) && (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE)) {    fprintf(f_pTestResultFile,          "      </CUNIT_RUN_SUITE_SUCCESS> \n"          "    </CUNIT_RUN_SUITE> \n");  }  fprintf(f_pTestResultFile,          "  </CUNIT_RESULT_LISTING>\n"          "  <CUNIT_RUN_SUMMARY> \n");  fprintf(f_pTestResultFile,          "    <CUNIT_RUN_SUMMARY_RECORD> \n"          "      <TYPE> Suites </TYPE> \n"          "      <TOTAL> %u </TOTAL> \n"          "      <RUN> %u </RUN> \n"          "      <SUCCEEDED> - NA - </SUCCEEDED> \n"          "      <FAILED> %u </FAILED> \n"          "    </CUNIT_RUN_SUMMARY_RECORD> \n",          pRegistry->uiNumberOfSuites,          pRunSummary->nSuitesRun,          pRunSummary->nSuitesFailed          );  fprintf(f_pTestResultFile,          "    <CUNIT_RUN_SUMMARY_RECORD> \n"          "      <TYPE> Test Cases </TYPE> \n"          "      <TOTAL> %u </TOTAL> \n"          "      <RUN> %u </RUN> \n"          "      <SUCCEEDED> %u </SUCCEEDED> \n"          "      <FAILED> %u </FAILED> \n"          "    </CUNIT_RUN_SUMMARY_RECORD> \n",          pRegistry->uiNumberOfTests,          pRunSummary->nTestsRun,          pRunSummary->nTestsRun - pRunSummary->nTestsFailed,          pRunSummary->nTestsFailed          );  fprintf(f_pTestResultFile,          "    <CUNIT_RUN_SUMMARY_RECORD> \n"          "      <TYPE> Assertions </TYPE> \n"          "      <TOTAL> %u </TOTAL> \n"          "      <RUN> %u </RUN> \n"          "      <SUCCEEDED> %u </SUCCEEDED> \n"          "      <FAILED> %u </FAILED> \n"          "    </CUNIT_RUN_SUMMARY_RECORD> \n"          "  </CUNIT_RUN_SUMMARY> \n",          pRunSummary->nAsserts,          pRunSummary->nAsserts,          pRunSummary->nAsserts - pRunSummary->nAssertsFailed,          pRunSummary->nAssertsFailed          );}/*------------------------------------------------------------------------*//** Handler function called when suite initialization fails. *  @param pSuite The suite for which initialization failed. */static void automated_suite_init_failure_message_handler(const CU_pSuite pSuite){  assert(NULL != pSuite);  assert(NULL != f_pTestResultFile);  if (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE) {    fprintf(f_pTestResultFile,            "      </CUNIT_RUN_SUITE_SUCCESS> \n"            "    </CUNIT_RUN_SUITE> \n");    f_bWriting_CUNIT_RUN_SUITE = CU_FALSE;  }  fprintf(f_pTestResultFile,          "    <CUNIT_RUN_SUITE> \n"          "      <CUNIT_RUN_SUITE_FAILURE> \n"          "        <SUITE_NAME> %s </SUITE_NAME> \n"          "        <FAILURE_REASON> %s </FAILURE_REASON> \n"          "      </CUNIT_RUN_SUITE_FAILURE> \n"          "    </CUNIT_RUN_SUITE>  \n",          (NULL != pSuite->pName) ? pSuite->pName : "",           "Suite Initialization Failed");}/*------------------------------------------------------------------------*//** Handler function called when suite cleanup fails. *  @param pSuite The suite for which cleanup failed. */static void automated_suite_cleanup_failure_message_handler(const CU_pSuite pSuite){  assert(NULL != pSuite);  assert(NULL != f_pTestResultFile);  if (CU_TRUE == f_bWriting_CUNIT_RUN_SUITE) {    fprintf(f_pTestResultFile,            "      </CUNIT_RUN_SUITE_SUCCESS> \n"            "    </CUNIT_RUN_SUITE> \n");    f_bWriting_CUNIT_RUN_SUITE = CU_FALSE;  }  fprintf(f_pTestResultFile,          "    <CUNIT_RUN_SUITE> \n"          "      <CUNIT_RUN_SUITE_FAILURE> \n"          "        <SUITE_NAME> %s </SUITE_NAME> \n"          "        <FAILURE_REASON> %s </FAILURE_REASON> \n"          "      </CUNIT_RUN_SUITE_FAILURE> \n"          "    </CUNIT_RUN_SUITE>  \n",          (NULL != pSuite->pName) ? pSuite->pName : "",           "Suite Cleanup Failed");}/*------------------------------------------------------------------------*//** Finalize and close the results output file generated *  by the automated interface. */static CU_ErrorCode uninitialize_result_file(void){  char* szTime;  time_t tTime = 0;  assert(NULL != f_pTestResultFile);  CU_set_error(CUE_SUCCESS);  time(&tTime);  szTime = ctime(&tTime);  fprintf(f_pTestResultFile,          "  <CUNIT_FOOTER> File Generated By CUnit v" CU_VERSION " at %s </CUNIT_FOOTER> \n"          "</CUNIT_TEST_RUN_REPORT>",          (NULL != szTime) ? szTime : "");  if (0 != fclose(f_pTestResultFile)) {    CU_set_error(CUE_FCLOSE_FAILED);  }  return CU_get_error();}/*------------------------------------------------------------------------*//** Generate an xml listing of all tests in all suites for the *  specified test registry.  The output is directed to a file *  having the specified name. *  @param pRegistry   Test registry for which to generate list (non-NULL). *  @param szFilename  Non-NULL, non-empty string containing name for *                     listing file. *  @return  A CU_ErrorCode indicating the error status. */static CU_ErrorCode automated_list_all_tests(CU_pTestRegistry pRegistry, const char* szFilename){  CU_pSuite pSuite = NULL;  CU_pTest  pTest = NULL;  FILE* pTestListFile = NULL;  char* szTime;  time_t tTime = 0;  CU_set_error(CUE_SUCCESS);  if (NULL == pRegistry) {    CU_set_error(CUE_NOREGISTRY);  }  else if ((NULL == szFilename) || (0 == strlen(szFilename))) {    CU_set_error(CUE_BAD_FILENAME);  }  else if (NULL == (pTestListFile = fopen(f_szTestListFileName, "w"))) {    CU_set_error(CUE_FOPEN_FAILED);  }  else {    setvbuf(pTestListFile, NULL, _IONBF, 0);    fprintf(pTestListFile,            "<?xml version=\"1.0\" ?> \n"            "<?xml-stylesheet type=\"text/xsl\" href=\"CUnit-List.xsl\" ?> \n"            "<!DOCTYPE CUNIT_TEST_LIST_REPORT SYSTEM \"CUnit-List.dtd\"> \n"            "<CUNIT_TEST_LIST_REPORT> \n"            "  <CUNIT_HEADER/> \n"            "  <CUNIT_LIST_TOTAL_SUMMARY> \n");    fprintf(pTestListFile,            "    <CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n"            "      <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Suites </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> \n"            "      <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %u </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n"            "    </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n",            pRegistry->uiNumberOfSuites);    fprintf(pTestListFile,            "    <CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n"            "      <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Test Cases </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> \n"            "      <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %u </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> \n"            "    </CUNIT_LIST_TOTAL_SUMMARY_RECORD> \n"            "  </CUNIT_LIST_TOTAL_SUMMARY> \n",            pRegistry->uiNumberOfTests);    fprintf(pTestListFile,            "  <CUNIT_ALL_TEST_LISTING> \n");    pSuite = pRegistry->pSuite;    while (NULL != pSuite) {      pTest = pSuite->pTest;      fprintf(pTestListFile,              "    <CUNIT_ALL_TEST_LISTING_SUITE> \n"              "      <CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION> \n"              "        <SUITE_NAME> %s </SUITE_NAME> \n"              "        <INITIALIZE_VALUE> %s </INITIALIZE_VALUE> \n"              "        <CLEANUP_VALUE>  %s </CLEANUP_VALUE> \n"              "        <TEST_COUNT_VALUE> %u </TEST_COUNT_VALUE> \n"              "      </CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION> \n",              (NULL != pSuite->pName) ? pSuite->pName : "",              (NULL != pSuite->pInitializeFunc) ? "Yes" : "No",              (NULL != pSuite->pCleanupFunc) ? "Yes" : "No",              pSuite->uiNumberOfTests);      fprintf(pTestListFile,              "      <CUNIT_ALL_TEST_LISTING_SUITE_TESTS> \n");      while (NULL != pTest) {        fprintf(pTestListFile,                "        <TEST_CASE_NAME> %s </TEST_CASE_NAME> \n",                 (NULL != pTest->pName) ? pTest->pName : "");        pTest = pTest->pNext;      }      fprintf(pTestListFile,              "      </CUNIT_ALL_TEST_LISTING_SUITE_TESTS> \n"              "    </CUNIT_ALL_TEST_LISTING_SUITE> \n");      pSuite = pSuite->pNext;    }    fprintf(pTestListFile, "  </CUNIT_ALL_TEST_LISTING> \n");    time(&tTime);    szTime = ctime(&tTime);    fprintf(pTestListFile,            "  <CUNIT_FOOTER> File Generated By CUnit v" CU_VERSION " at %s </CUNIT_FOOTER> \n"            "</CUNIT_TEST_LIST_REPORT>",            (NULL != szTime) ? szTime : "");    if (0 != fclose(pTestListFile)) {      CU_set_error(CUE_FCLOSE_FAILED);    }  }  return CU_get_error();}/** @} */

⌨️ 快捷键说明

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