亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区在线观看| 亚洲国产欧美另类丝袜| 久久国产免费看| 91久久国产最好的精华液| 国产精品午夜在线| 在线精品视频免费观看| 欧美日韩欧美一区二区| 久久亚洲一级片| 亚洲777理论| 91一区二区在线观看| 精品久久久久一区| 午夜成人在线视频| 91在线你懂得| 国产日韩欧美高清在线| 男女男精品视频网| 911国产精品| 亚洲午夜久久久| 色哟哟国产精品免费观看| 国产欧美一区二区三区网站| 美女一区二区久久| 欧美日韩不卡一区二区| 一区二区欧美视频| 91免费观看在线| 国产精品乱子久久久久| 国产精品1024| 久久精品视频网| 福利电影一区二区三区| 国产日韩欧美a| 国产成人午夜视频| 亚洲欧美欧美一区二区三区| 六月婷婷色综合| 欧美精品一二三| 亚洲大型综合色站| 欧美性xxxxx极品少妇| 夜夜嗨av一区二区三区中文字幕 | 午夜精品在线视频一区| 欧美四级电影在线观看| 亚洲不卡一区二区三区| 欧美丰满少妇xxxxx高潮对白| 亚洲午夜电影在线| 在线播放/欧美激情| 蜜桃91丨九色丨蝌蚪91桃色| 日韩一区二区精品| 久久aⅴ国产欧美74aaa| 国产日韩欧美高清| 色综合咪咪久久| 亚洲国产一区二区视频| www.在线成人| 欧美精品 国产精品| 夜夜爽夜夜爽精品视频| 精品视频999| 久久精品噜噜噜成人88aⅴ| 精品处破学生在线二十三| 国产福利精品一区| 中文字幕制服丝袜成人av| 91黄色小视频| 美脚の诱脚舐め脚责91 | 91视频免费看| 亚洲午夜一区二区| 欧美精品一区二区在线观看| 国v精品久久久网| 亚洲猫色日本管| 日韩视频在线观看一区二区| 国产激情精品久久久第一区二区 | 91精品黄色片免费大全| 精品亚洲成a人在线观看| 久久久久高清精品| 欧美综合久久久| 麻豆成人在线观看| 国产精品福利一区二区三区| 欧美三级电影网站| 国产乱码精品一区二区三区av| 亚洲免费在线播放| 精品国精品国产尤物美女| 91麻豆swag| 国模少妇一区二区三区| 亚洲国产精品久久艾草纯爱| 26uuu国产一区二区三区| 色综合久久66| 国产精品自拍一区| 国产精品18久久久久久久久久久久 | 麻豆国产精品官网| 亚洲欧洲一区二区在线播放| 在线综合+亚洲+欧美中文字幕| 风间由美一区二区三区在线观看 | 一区二区在线免费| 久久精品亚洲麻豆av一区二区| 在线观看成人免费视频| 国产成人久久精品77777最新版本| 有码一区二区三区| 久久久亚洲综合| 91麻豆精品国产91久久久使用方法 | 精品中文字幕一区二区小辣椒| 一区二区三区在线观看网站| 久久久99免费| 欧美一级午夜免费电影| 欧美日韩一区中文字幕| 日本韩国欧美一区| 99久久国产综合色|国产精品| 久久精品国产99| 日本91福利区| 日韩精品福利网| 亚洲国产另类av| 亚洲成人在线观看视频| 亚洲免费在线看| 国产精品久久久久久久久久久免费看 | 欧美精品一级二级三级| 欧美性淫爽ww久久久久无| 国产69精品一区二区亚洲孕妇| 久久精品久久综合| 美女任你摸久久| 久久99国产精品尤物| 久久综合综合久久综合| 日韩精品乱码av一区二区| 日韩精品一级二级| 美女www一区二区| 一区二区三区日韩精品| 亚洲高清一区二区三区| 一区二区在线免费| 久久99久国产精品黄毛片色诱| 五月综合激情网| 婷婷久久综合九色综合绿巨人| 亚洲国产日韩av| 丁香激情综合国产| 成人aaaa免费全部观看| 色综合久久久久综合体桃花网| 91丨porny丨国产| 欧日韩精品视频| 欧美麻豆精品久久久久久| 91精品国产免费| 精品第一国产综合精品aⅴ| 国产欧美日韩视频在线观看| 亚洲欧美在线观看| 亚洲国产成人va在线观看天堂 | 日韩欧美在线1卡| 2017欧美狠狠色| 国产精品国产三级国产aⅴ入口| 成人免费一区二区三区视频| 亚洲综合无码一区二区| 亚洲成人综合视频| 国内精品国产三级国产a久久| 成人99免费视频| 在线播放日韩导航| 久久综合av免费| 亚洲精品成人悠悠色影视| 日韩激情一区二区| 成人app网站| 欧美一级在线观看| 国产精品久久久久久久久果冻传媒 | 精品一区免费av| 波多野结衣欧美| 欧美老肥妇做.爰bbww| 久久久久久免费| 一区二区三区精品在线观看| 激情久久五月天| 久久蜜臀精品av| 亚洲综合色婷婷| 国产乱色国产精品免费视频| 91黄视频在线| 国产女同互慰高潮91漫画| 亚洲高清中文字幕| 成人av在线播放网址| 制服.丝袜.亚洲.中文.综合| 18成人在线视频| 狠狠色伊人亚洲综合成人| 色偷偷成人一区二区三区91| 精品国产3级a| 亚洲高清视频在线| 97久久精品人人澡人人爽| 日韩欧美亚洲一区二区| 一区二区三区在线观看视频| 国产中文字幕精品| 3atv一区二区三区| 亚洲免费观看视频| 成人激情文学综合网| 日韩欧美一区电影| 午夜久久久久久久久| 色婷婷国产精品综合在线观看| 26uuu久久综合| 日韩成人午夜电影| 欧美系列日韩一区| 亚洲精品水蜜桃| 成人小视频免费观看| 2021久久国产精品不只是精品| 午夜精品123| 欧美体内she精高潮| 亚洲欧美视频在线观看视频| 国产成人精品一区二| 久久婷婷一区二区三区| 久久精品免费看| 亚洲精品在线三区| 久久91精品国产91久久小草| 欧美日韩在线综合| 亚洲成av人**亚洲成av**| 91传媒视频在线播放| 亚洲日本青草视频在线怡红院| 成人黄色在线网站| 欧美激情一区在线观看| 粉嫩蜜臀av国产精品网站|