單元測試工具 CUnit 簡介

發表于:2015-04-22來源:uml.org.cn作者:火龍果軟件點擊數: 標簽:CUnit
1.CUnit簡介 1.1 CUnit簡要描述 CUnit是一個編寫、管理及運行c語言單元測試的系統。它使用一個簡單的框架來構建測試結構,并為普通數據結構的測試提供豐富的斷言。此外,

  1.CUnit簡介

  1.1 CUnit簡要描述

  CUnit是一個編寫、管理及運行c語言單元測試的系統。它使用一個簡單的框架來構建測試結構,并為普通數據結構的測試提供豐富的斷言。此外,CUnit為測試的運行和結果查看提供了許多不同的接口,包括自動測試模式和可交互的控制臺模式。

  其常用的數據類型和函數在以下頭文件中聲明:

  頭文件 內容描述

   包括測試用例中常用的宏定義和框架中其它頭文件

   錯誤處理函數及錯誤編號

   測試注冊簿、測試包和測試用例的操作及數據類型

   測試運行及結果檢索的操作及數據類型

   輸出Xml結果相關的自動模式接口

   非交互模式的基本模式接口

   交互模式的接口

  1.2 測試框架結構

  CUnit核心框架為測試注冊簿、測試包和測試用例的管理提供了基本支持,它提供的接口可以使用戶和測試框架交互,方便測試的運行和測試結果的查看。CUnit被組織成一個常見的單元測試框架,其結構如下:

  測試用例被打包成測試包,并被注冊到當前活動的測試注冊簿中。測試包的裝載和卸載函數在測試執行前后被自動調用。所有的測試包和測試用例可以一鍵運行,也可以選擇相應的測試包或測試用例來執行測試。

  1.3 基本使用方法

  使用CUnit框架的常用流程如下:

  編寫測試用例,如果有必要須對測試包進行初始化或者清理

  初始化測試注冊簿 CU_initialize_registry()

  向注冊簿中注冊測試包 CU_add_suite()

  向測試包中添加測試用例 CU_add_test()

  使用合適的測試模式執行測試CU_automated(basic/console/curses)_run_tests()

  清理測試注冊簿 CU_cleanup_registry()

  1.4 Linux下CUnit的安裝

The usual sequence of steps should succeed in building and installing CUnit:
aclocal  (if necessary)
autoconf (if necessary)
automake (if necessary)
chmod u+x configure (if necessary)
./configure --prefix <Your choice of directory for installation>
make
make install
What's installed:
libcunit.a (Library file)
CUnit Header files
DTD and XSL files supporting xml output files in share directory
Man Pages in relevant man directories under the installation path.
HTML users guide in the doc subdirectory of the installation path.
Example & test programs in the share subdirectory of the install path.

  2. 編寫CUnit測試用例

  2.1 測試用例函數的命名

  CUnit中對于測試函數的定義沒有嚴格的規范,一個常用的示例如下:

int maxi(int i1, int i2)
  {
  return (i1 > i2)  i1 : i2;
  }
  void test_maxi(void)
  {
  CU_ASSERT(maxi(0,2) == 2);
  CU_ASSERT(maxi(0,-2) == 0);
  CU_ASSERT(maxi(2,2) == 2);
  }

  2.2 CUnit中的斷言

  CUnit為邏輯條件測試提供了一系列的斷言。測試框架會跟蹤這些斷言的通過或失敗,當測試執行完成時便可看到結果。

  每一個斷言測試一個邏輯條件,條件的值為CU_FALSE表示斷言失敗。對于測試失敗,測試將會繼續執行,除非用戶選擇“xxx_FATAL”類型的斷言,這種情況下該測試函數將會失敗并立即返回。FATAL類型的斷言應該和警告一塊使用!一旦FATAL類型的斷言導致測試失敗,測試函數將沒有機會做清理工作,普通的清理函數不會起任何作用。

  另外一些特殊的斷言被注冊為“pass”或“fail”,它們不是用來做邏輯測試,而是用來測試流程控制或者其他條件測試的。例如:

void test_longjmp(void)
{
jmp_buf buf;
int i;
i = setjmp(buf);
if (i == 0) {
run_other_func();
CU_PASS("run_other_func() succeeded.");
}
else
CU_FAIL("run_other_func() issued longjmp.");
}

原文轉自:http://www.uml.org.cn/Test/201404151.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97