亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rcunit_stepbystep.html

?? 一個做軟件測試的源碼,可以用于工程中軟件測試,全部為自己編寫,內付說明
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>RCUnit: RCUnit step by step</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- 制作者 Doxygen 1.4.2 --><div class="qindex"><a class="qindex" href="index.html">首頁</a> | <a class="qindex" href="modules.html">模塊</a> | <a class="qindex" href="annotated.html">數據結構</a> | <a class="qindex" href="dirs.html">目錄</a> | <a class="qindex" href="files.html">文件列表</a> | <a class="qindex" href="functions.html">數據字段</a> | <a class="qindex" href="globals.html">全局定義</a> | <a class="qindex" href="pages.html">相關頁面</a></div><div class="nav"><b>rcunit_stepbystep.dox</b></div><h1><a class="anchor" name="rcunit_stepbystep">RCUnit step by step</a></h1><h2><a class="anchor" name="stepbystep_catalog">目錄</a></h2><ul><li><a class="el" href="rcunit_stepbystep.html#build_rcunit">編譯 RCUnit</a></li><li><a class="el" href="rcunit_stepbystep.html#create_project">建立工程</a></li><li><a class="el" href="rcunit_stepbystep.html#settingup_project">配置工程</a></li><li><a class="el" href="rcunit_stepbystep.html#run_all_tests">準備測試程序框架</a></li><li><a class="el" href="rcunit_stepbystep.html#implement_function">編寫功能函數</a></li><li><a class="el" href="rcunit_stepbystep.html#prepare_testcases">準備測試用例</a></li><li><a class="el" href="rcunit_stepbystep.html#add_suite_and_case">添加測試集及測試用例</a></li><li><a class="el" href="rcunit_stepbystep.html#analyse_results">分析測試結果</a></li><li><a class="el" href="rcunit_stepbystep.html#rectify_errors">修改代碼錯誤</a></li><li><a class="el" href="rcunit_stepbystep.html#test_suite_resources">測試集的資源申請及釋放</a></li></ul><p>該示例工程的所有源碼在 rcunit/examples/simple_example 目錄下。<h2><a class="anchor" name="build_rcunit">編譯 RCUnit</a></h2>當獲得 RCUnit 的全部源碼后,你需要自己編譯 RCUnit,生成相應的庫文件。 目前 RCUnit 的 project 目錄中提供了 VC 6 和 Visual Studio.Net 的工程文件,你可以用相應工具打開工程文件,直接編譯即可。 編譯 RCUnit 會生成 Debug 版本的 rcunitd.lib 和 Release 版本的 rcunit.lib ,它們都放在 RCUnit 的 lib 目錄中。 編譯完成之后,需要把 RCUnit 的 include 目錄加到 IDE 的 include 搜索路徑中, 把 RCUnit 的 lib 目錄加到 IDE 庫搜索路徑中。 編譯和準備工作完成,可以開始使用 RCUnit 了。<h2><a class="anchor" name="create_project">建立工程</a></h2>下面我們將以一個實際例子,講述怎樣在 VC 6 下使用 RCUnit。<p>我們的目標是要實現這樣的功能,核心功能函數接口如下: <div class="fragment"><pre class="fragment"><span class="comment">/*************************************************</span><span class="comment">Function:       GetPrime</span><span class="comment">Description:    生成 nPrime 個素數,并保存到容器中</span><span class="comment">Calls:          無</span><span class="comment">Called By:      無</span><span class="comment">Input:          nPrime: 需要產生的素數個數</span><span class="comment">Output:         arr[]: 存素數的數組</span><span class="comment">Return:         實際產生素數的個數</span><span class="comment">Others:         設計思路:對任何整數currentNumer而言,</span><span class="comment">                如果它不能被小于它的開方的素數整除,</span><span class="comment">                那么它也是素數。</span><span class="comment">*************************************************/</span></pre></div><p>我們首先建立正式工程 GetPrime ,然后建立測試工程 TestGetPrime 。<p><div align="center"><img src="rcunit_stepbystep_two_project.gif" alt="rcunit_stepbystep_two_project.gif"><p><strong>正式工程與測試工程</strong></p></div> <h2><a class="anchor" name="settingup_project">配置工程</a></h2>我們需要在測試工程 TestGetPrime 中加入 RCUnit 庫,具體操作為 Project | Settings , 在左邊的工程列表中選中 TestGetPrime ,在Settings for 下拉框中選中 Win32 Debug, 然后選擇 Link 屬性頁,在 Object/library modules 中加入 rcunitd.lib。 對于 Win32 Release 設置,加入 rcunit.lib 。<p><div align="center"><img src="rcunit_stepbystep_project_settings.gif" alt="rcunit_stepbystep_project_settings.gif"><p><strong>工程設置</strong></p></div> 你還需要添加編譯后執行事件,使得 IDE 編譯完成之后,自動執行 RCUnit 測試。 具體操作為 Project | Settings, 在左邊的工程列表中選中 TestGetPrime , 在Settings for 下拉框中選中 All Configurations,選擇 Post-build step 屬性頁, 添加測試工程生成文件全路徑到 Post-build command(s) 列表。 MSVC6 為方便工程設置,定義了一些特殊路徑宏。  宏為生成文件全路徑,所以你只需要在 Post-build command(s) 列表中加入  即可。<p><div align="center"><img src="rcunit_stepbystep_post_build.gif" alt="rcunit_stepbystep_post_build.gif"><p><strong>設置“編譯后事件”</strong></p></div> <h2><a class="anchor" name="run_all_tests">準備測試程序框架</a></h2>我們在 TestGetPrime 工程中添加一個 TestGetPrime.c 文件,用以編寫測試用例。 在文件中定義一個空測試集并添加測試用例,測試集和相應測試函數一般定義在同一個文件中。 <div class="fragment"><pre class="fragment"><a class="code" href="group__rcunit__write__test__suite.html#ga0">CUNIT_TEST_SUITE_BEGIN</a>(TestSample);    <span class="comment">// 把測試用例注冊到這里</span><a class="code" href="group__rcunit__write__test__suite.html#ga4">CUNIT_TEST_SUITE_END</a>();</pre></div><p>在 main 文件中注冊這個測試集。 <div class="fragment"><pre class="fragment"><span class="preprocessor">#ifdef __cplusplus</span><span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">"C"</span> {<span class="preprocessor">#endif</span><span class="preprocessor"></span><span class="preprocessor">#include &lt;<a class="code" href="rcunit_8h.html">rcunit/rcunit.h</a>&gt;</span><span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>* argv[]){    <a class="code" href="group__rcunit__registing__test__suite.html#ga0">CUNIT_ADD_TEST_SUITE</a>(TestSample);    <a class="code" href="group__rcunit__running__test__case.html#ga0">CUNIT_RUN_TEST</a>();    <span class="keywordflow">return</span> <a class="code" href="group__rcunit__running__test__case.html#ga1">CUNIT_IS_PASSED</a>();}<span class="preprocessor">#ifdef __cplusplus</span><span class="preprocessor"></span>}<span class="preprocessor">#endif</span></pre></div><p>到此為止,你已經完成了所有的工程設置和測試程序框架的準備, 當你編譯 TestGetPrime 工程后,會自動執行生成的測試程序,并在 Build 窗口輸出測試信息。 之后你所需要做的事情,就是針對各功能函數,添加相應的測試用例。<h2><a class="anchor" name="implement_function">編寫功能函數</a></h2>在測試功能函數之前,我們首先要實現功能函數。<p>當然,其實我們更加推薦先寫測試用例、再編寫代碼、并交替進行的開發方式,即所謂“測試先行”或者“測試驅動開發”, 不過由于敘述麻煩,暫時假設我們先實現功能函數。<p>在 GetPrime 工程中添加一個新的文件 Prime.c ,用以編寫 GetPrime 函數。 (注意:不要把 GetPrime 函數和 main 函數寫在同一文件中。 我們需要把功能函數所在文件加入到測試工程中測試,如果功能函數所在文件中也存在 mian 函數,會因為測試工程中 有兩個 main 函數而導致錯誤。) GetPrime 函數需要在頭文件中聲明,測試工程在用到 GetPrime 函數之前,需要包含這個頭文件。<p>在前面的函數頭注釋中已經給出了詳細的功能需求,你要是有興趣可以自己實現這個函數,不過我們給出了一個實現,代碼如下:<p><div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> GetPrime(<span class="keywordtype">int</span> arr[],<span class="keywordtype">int</span> nPrime){    <span class="keywordtype">int</span> count;          <span class="comment">/*已檢測出是素數的數的個數*/</span>    <span class="keywordtype">int</span> currentNumber;  <span class="comment">/*當前要檢測是否素數的數*/</span>    <span class="keywordtype">int</span> k;    <span class="keywordflow">if</span>(arr == NULL)            {        <span class="keywordflow">return</span> 0;    }    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nPrime &lt;= 0)            {        <span class="keywordflow">return</span> 0;    }    <span class="keywordflow">else</span> <span class="keywordflow">if</span>(nPrime == 1)        {        arr[0] = 2;        <span class="keywordflow">return</span> 1;    }    <span class="keywordflow">else</span>    {        ;    }    arr[0] = 2;    count = 1;    currentNumber = 3;    <span class="keywordflow">while</span>(count &lt; nPrime)    {        k=0;        <span class="keywordflow">while</span>(arr[k] * arr[k] &lt;= currentNumber)        {            <span class="keywordflow">if</span>(currentNumber % arr[k] == 0)            {                <span class="comment">/*currentNumber是合數*/</span>                currentNumber += 2;            }            <span class="keywordflow">else</span>             {                k++;             }        }        <span class="comment">/*currentNumber是素數*/</span>        arr[count++] = currentNumber;        currentNumber += 2;    }    <span class="keywordflow">return</span> nPrime;}</pre></div><h2><a class="anchor" name="prepare_testcases">準備測試用例</a></h2>在寫測試函數之前,我們需要考慮我們針對那些情況測試,即設計測試用例。 測試不可能遍歷所有可能的情況,因此我們需要仔細地設計用例,讓測試用例覆蓋到各種典型情況即可。 在針對函數進行單元測試時,我們主要是根據函數參數及參數間的邏輯關系等設計測試用例。 函數 int GetPrime(int arr[],int nPrime) 有兩個參數。對于指針參數,有空指針和非空指針兩種情況; 對于第二個參數,希望得到的素數個數,有負數、零、正數三種情況。 以上幾種情況及部分條件組合情況,我們都需要在測試用例中覆蓋到。 另外,我們還需要考慮覆蓋到邊界情況等,例如 nPrime = 0。 關于測試用例的設計,沒有統一的方法或準則,只要做到覆蓋各種典型情況即可。<p>我們在此設計了以下幾個測試用例(只是舉例,并未達到完全覆蓋): <br>一般情況 nPrime = 10 預期返回 3 、arr[0] = 2, arr[1] = 3, arr[2] = 5 … <br>邊界情況 nPrime = 0 預期返回 0 <br>非法情況 nPrime = -2 預期返回 0 <br>臨界情況 nPrime = 1 預期返回 1 、arr[0] = 2 <br>非法情況 arr = NULL 預期返回 0<h2><a class="anchor" name="add_suite_and_case">添加測試集及測試用例</a></h2>RCUnit 采用測試集和測試用例的組織方式管理和執行測試用例。 一個測試集即一個測試用例分組,其中可以包含多個測試用例。 測試用例不能單獨存在,必須屬于一個測試集。<p>首先編寫測試函數: <div class="fragment"><pre class="fragment"><span class="comment">/* 測試普通的情況 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_NormalCase(){    <span class="keywordtype">int</span> arr[11] = {0};    <span class="keywordtype">int</span> nRet = GetPrime(arr, 10);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(10, nRet);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(2, arr[0]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(3, arr[1]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(5, arr[2]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(7, arr[3]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(11, arr[4]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(13, arr[5]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(17, arr[6]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(19, arr[7]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(23, arr[8]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(29, arr[9]);}<span class="comment">/* 測試n = 0的情況 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_Zero(){    <span class="keywordtype">int</span> arr[5];    <span class="keywordtype">int</span> nRet = GetPrime(arr, 0);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(0, nRet);}<span class="comment">/* 測試n為負數的情況 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_Negative(){    <span class="keywordtype">int</span> arr[5];    <span class="keywordtype">int</span> nRet = GetPrime(arr, -2);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(0, nRet);}<span class="comment">/* 測試n = 1的情況 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_One(){    <span class="keywordtype">int</span> arr[5];    <span class="keywordtype">int</span> nRet = GetPrime(arr, 1);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(1, nRet);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(2, arr[0]);}<span class="comment">/* 測試空指針的情況 */</span>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人av影院| 99精品国产99久久久久久白柏| 日本精品一级二级| 综合分类小说区另类春色亚洲小说欧美| 懂色av噜噜一区二区三区av| 久久久久久久久久电影| 懂色av噜噜一区二区三区av| 亚洲色图另类专区| 欧美综合视频在线观看| 日本系列欧美系列| 精品盗摄一区二区三区| 国产成人免费9x9x人网站视频| 18成人在线观看| 欧美日韩精品一区二区三区| 韩国女主播一区二区三区| 国产精品情趣视频| 欧美日韩一二区| 精品一区二区三区在线观看| 国产精品理伦片| 欧美日韩免费不卡视频一区二区三区| 视频一区在线播放| 国产精品久久久久久久久久久免费看| www成人在线观看| 久久青草欧美一区二区三区| 亚洲欧美激情视频在线观看一区二区三区 | 91色porny| 国产成人一区二区精品非洲| 欧美日韩高清在线| 久久99精品国产.久久久久久| 一区二区三区久久| 国产伦精品一区二区三区免费| 色综合久久久久久久久久久| 91精品国产综合久久蜜臀| 久久久久久久久99精品| 日韩精品一二区| 色94色欧美sute亚洲13| 国产亚洲成年网址在线观看| 亚洲小少妇裸体bbw| 日本韩国欧美一区| 亚洲天堂免费看| 99精品视频在线免费观看| 2欧美一区二区三区在线观看视频| 日韩欧美精品三级| 久久疯狂做爰流白浆xx| 国产在线精品一区二区三区不卡| 国产成人精品免费| 3d动漫精品啪啪一区二区竹菊| 欧美日韩你懂的| 国产精品欧美一区二区三区| 97精品久久久午夜一区二区三区 | 高清不卡一区二区| 亚洲一区二区三区四区在线观看| 国产网红主播福利一区二区| 欧美日韩免费观看一区二区三区| 国产福利一区在线| 亚洲婷婷国产精品电影人久久| 欧洲精品在线观看| 亚洲激情男女视频| 欧美肥妇bbw| 丝袜诱惑制服诱惑色一区在线观看| 91亚洲资源网| 午夜精品久久久久久久99水蜜桃| 欧美在线观看一二区| 午夜欧美大尺度福利影院在线看| 欧美精品少妇一区二区三区| 日日夜夜精品视频天天综合网| 日韩亚洲欧美在线| 成人午夜在线免费| 亚洲综合免费观看高清在线观看| 精品视频在线视频| 国产精品系列在线观看| 亚洲综合小说图片| 久久夜色精品国产欧美乱极品| 国产精品 欧美精品| 亚洲福中文字幕伊人影院| 91精品国产乱| 99精品视频在线观看免费| 亚洲bt欧美bt精品| 久久精品一区二区| 91精品国产入口| 国产不卡在线视频| 免费成人美女在线观看.| 在线视频国内自拍亚洲视频| 中文字幕一区二区三区精华液| 亚洲一区二区视频| 99视频精品在线| 成人免费av资源| 国产精品一区专区| 国产一区二区视频在线| 国产精品18久久久久久久久久久久| 国产精品自拍三区| 成人精品免费看| 色综合久久综合网欧美综合网| 99国内精品久久| 欧美亚洲图片小说| 欧美一级视频精品观看| 精品88久久久久88久久久| 欧美激情中文不卡| 亚洲少妇30p| 日韩精品欧美成人高清一区二区| 麻豆成人久久精品二区三区小说| 国产成人av福利| 色婷婷亚洲综合| 91精品福利在线一区二区三区| 精品国产露脸精彩对白| 精品粉嫩超白一线天av| 国产精品美女一区二区三区| 一区二区三区在线观看欧美| 日本欧美一区二区三区乱码| 国精产品一区一区三区mba桃花| 成人激情av网| 69p69国产精品| 国产欧美一区二区三区鸳鸯浴| 亚洲欧洲另类国产综合| 丝袜美腿亚洲色图| 国产成人免费高清| 欧美另类变人与禽xxxxx| 26uuu另类欧美亚洲曰本| 综合久久国产九一剧情麻豆| 日韩二区三区在线观看| 成人国产一区二区三区精品| 欧美日韩精品专区| 国产精品二区一区二区aⅴ污介绍| 亚洲成人黄色小说| 成人免费视频视频| 日韩女优制服丝袜电影| 亚洲人成人一区二区在线观看| 日本不卡一区二区三区| 97久久人人超碰| 久久综合狠狠综合久久综合88 | 国产成人亚洲综合a∨婷婷| 色综合久久66| 久久综合99re88久久爱| 亚洲国产精品久久久久秋霞影院 | 爽爽淫人综合网网站| 国产999精品久久久久久绿帽| 欧美精品少妇一区二区三区| 国产精品美女久久久久高潮| 蜜桃av噜噜一区二区三区小说| 91日韩在线专区| 国产日韩欧美亚洲| 久久精品99久久久| 欧美日韩亚洲另类| 亚洲欧美日韩中文字幕一区二区三区| 国内精品伊人久久久久av一坑| 欧美日韩一级二级| 亚洲精品免费电影| 不卡的av在线播放| www日韩大片| 免费不卡在线观看| 欧美日韩一区二区三区四区五区| 国产精品嫩草99a| 国产精品996| 精品精品国产高清a毛片牛牛| 日韩在线一区二区三区| 欧美在线观看视频一区二区三区| 国产精品久久夜| 成人av高清在线| 国产精品午夜免费| 懂色av一区二区三区免费看| 国产欧美日韩三级| 国产麻豆91精品| 久久奇米777| 国产剧情一区在线| 日本一区二区三区高清不卡| 国产精品一级二级三级| 久久久另类综合| 国产精品一级片在线观看| 久久―日本道色综合久久| 国产一区二区精品久久91| 精品国产乱码久久久久久图片 | 国产精品一区二区无线| 国产亚洲精久久久久久| 丁香五精品蜜臀久久久久99网站| 久久久久久久一区| 丁香婷婷综合色啪| 亚洲视频一二三区| 色综合天天在线| 亚洲国产欧美一区二区三区丁香婷| 欧美私模裸体表演在线观看| 香蕉成人伊视频在线观看| 91精品国产乱| 国产精品一区二区x88av| 欧美韩日一区二区三区四区| 波多野结衣91| 亚洲一区在线视频观看| 欧美一区永久视频免费观看| 久久精品999| 国产精品欧美一区二区三区| 91黄视频在线观看| 丝袜美腿亚洲色图| 久久精品一区二区三区不卡 | 欧美伊人久久久久久午夜久久久久| 亚洲成人福利片| 精品国产一区二区三区不卡| 国产精品一区二区久激情瑜伽| 亚洲精选免费视频| 日韩一区二区三区高清免费看看| 国精品**一区二区三区在线蜜桃| 中文字幕一区二区三区视频|