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

📄 rcunit_stepbystep.html

📁 一个做软件测试的源码,可以用于工程中软件测试,全部为自己编写,内付说明
💻 HTML
📖 第 1 页 / 共 2 页
字号:
CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_Null(){    <span class="keywordtype">int</span> nRet = GetPrime(NULL, 4);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(0, nRet);}</pre></div><p>往 TestSample 测试集中添加测试用例。 <div class="fragment"><pre class="fragment"><a class="code" href="group__rcunit__write__test__suite.html#ga0">CUNIT_TEST_SUITE_BEGIN</a>(TestSample);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_NormalCase);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Zero);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Negative);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_One);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Null);<a class="code" href="group__rcunit__write__test__suite.html#ga4">CUNIT_TEST_SUITE_END</a>();</pre></div><p>注意:两个测试集名字不能重复,不同测试集的测试用例的名字也不能重复。<h2><a class="anchor" name="analyse_results">分析测试结果</a></h2>到此为止,完成了所有的工作了,编译整个 TestGetPrime 工程吧! 不过,并不顺利,编译结果如下:<p><div align="center"><img src="rcunit_stepbystep_errors.gif" alt="rcunit_stepbystep_errors.gif"><p><strong>编译错误</strong></p></div> 双击错误信息,代码窗口会跳转到对应的代码。<p><div align="center"><img src="rcunit_stepbystep_error_code.gif" alt="rcunit_stepbystep_error_code.gif"><p><strong>出错代码</strong></p></div> 这个测试用例不能通过,这说明功能函数 GetPrime 的实现有问题。<h2><a class="anchor" name="rectify_errors">修改代码错误</a></h2>仔细的阅读代码及 Debug ,找出了代码错误,修改后的代码如下,在内层 while 循环增加了对 k 复位的操作: <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;                k = 0;       <span class="comment">/* == 开始新的素数搜索,k需要复位 == */</span>            }            <span class="keywordflow">else</span>             {                k++;             }        }        <span class="comment">/*currentNumber是素数*/</span>        arr[count++] = currentNumber;        currentNumber += 2;    }    <span class="keywordflow">return</span> nPrime;}</pre></div><p>再次编译,所有的测试用例通过。<h2><a class="anchor" name="test_suite_resources">测试集的资源申请及释放</a></h2>在测试中,可能一个测试集中的所有的测试用例都存在某些相同的动作。 例如:运行被测试函数前,申请缓冲区内存,运行完毕之后释放缓冲区内存。 RCUnit 提供了为了测试集的初始化及资源释放各提供了一个统一的接口。 要使用这两个接口,我们需要在测试集中声明使用该接口,并且实现这个函数。 采用这种方式的完整代码如下: <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;malloc.h&gt;</span><span class="preprocessor">#include &lt;<a class="code" href="rcunit_8h.html">rcunit/rcunit.h</a>&gt;</span><span class="preprocessor">#include "../GetPrime/Primer.h"</span><span class="preprocessor">#define NULL ((void*)0)</span><span class="preprocessor"></span><a class="code" href="group__rcunit__write__test__suite.html#ga0">CUNIT_TEST_SUITE_BEGIN</a>(TestSample);    <a class="code" href="group__rcunit__write__test__suite.html#ga1">CUNIT_HANDLE_SET_UP</a>(TestSample_setUp);    <a class="code" href="group__rcunit__write__test__suite.html#ga2">CUNIT_HANDLE_TEAR_DOWN</a>(TestSample_tearDown);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_NormalCase);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Zero);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Negative);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_One);    <a class="code" href="group__rcunit__write__test__suite.html#ga3">CUNIT_TEST</a>(TestSample_Null);<a class="code" href="group__rcunit__write__test__suite.html#ga4">CUNIT_TEST_SUITE_END</a>();<span class="keyword">static</span> <span class="keywordtype">int</span>* _pPrimeArray = NULL;CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_setUp(){    _pPrimeArray = (<span class="keywordtype">int</span>*)malloc(<span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)*100);}CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_tearDown(){    free(_pPrimeArray);}<span class="comment">/* 测试普通的情况 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_NormalCase(){    <span class="keywordtype">int</span> nRet = GetPrime(_pPrimeArray, 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, _pPrimeArray[0]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(3, _pPrimeArray[1]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(5, _pPrimeArray[2]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(7, _pPrimeArray[3]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(11, _pPrimeArray[4]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(13, _pPrimeArray[5]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(17, _pPrimeArray[6]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(19, _pPrimeArray[7]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(23, _pPrimeArray[8]);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(29, _pPrimeArray[9]);}<span class="comment">/* 测试n = 0的情况 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_Zero(){    <span class="keywordtype">int</span> _pPrimeArray[5];    <span class="keywordtype">int</span> nRet = GetPrime(_pPrimeArray, 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> _pPrimeArray[5];    <span class="keywordtype">int</span> nRet = GetPrime(_pPrimeArray, -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> _pPrimeArray[5];    <span class="keywordtype">int</span> nRet = GetPrime(_pPrimeArray, 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, _pPrimeArray[0]);}<span class="comment">/* 测试空指针的情况 */</span>CUNIT_DECL_TEST <span class="keywordtype">void</span> TestSample_Null(){    <span class="keywordtype">int</span> nRet = GetPrime(NULL, 4);    <a class="code" href="group__rcunit__making__assertion.html#ga0">CUNIT_ASSERT_EQUAL</a>(0, nRet);}<span class="preprocessor">#ifdef __cplusplus</span><span class="preprocessor"></span>}<span class="preprocessor">#endif</span></pre></div> <hr/><table width="100%">  <tr>    <td align="right" valign="center">    如果对 RCUnit 有任何的疑问或建议,请联系realdodo (<a href="mailto:realdodo@163.com">realdodo@163.com</a>)。    </td>  </tr></table></body> </html>

⌨️ 快捷键说明

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