前言:网上讲c语言单元测试的内容确实不太多,很多讲单元测试的都注重讲了单元测试的重要性、cppunit、junit的用法,但是没找到具体该如何进行单元测试的帖子,这就导致这几天知道了单元测试很重要,却不知道怎么写好这个测试,网上教程里的例子都是Assert.AreEqual,所以目前的收获很有限,试着在vs里写了几个测试,但是感觉并没有抓住单元测试的精髓,迷惑的很,希望老师多多指点。不过很神奇的一点是,我很深刻的认识到了单元测试的实用性,因为我以前写程序的时候,整体编译运行的时候如果出错了,自己又找不到错误,就会重新开一个文件,写几句话来试试程序里的某些语句好不好使,我那会儿是用来排查错误的,接触了单元测试以后才意识到我之前的行为也算单元测试的一种吧,所以觉得单元测试肯定很关键。
我理解的单元测试就是针对程序里的模块编写一些例子,将预期的结果和实际输出的结果相比较来判断这个模块是否正常运作,因为去掉了模块之间的联系,由人为的赋予数值,这样就可以将一个个模块独立诊断,可以很大程度上保证整个程序的正确性。c语言的话,所说的模块大概就是指用到的函数吧,所以就写了几个针对用到的函数的测试。
https:https://git.coding.net/gongcr/word-frequency.git
ssh:git@git.coding.net:gongcr/word-frequency.git
git:git://git.coding.net/gongcr/word-frequency.git
代码如下:
1 using namespace Microsoft::VisualStudio::CppUnitTestFramework; 2 3 namespace UnitTest1 4 { 5 TEST_CLASS(UnitTest1) 6 { 7 public: 8 9 TEST_METHOD(med3_Test) 10 { 11 struct fre_word w[3] = { { 10,"a" },{ 15,"b" },{ 20,"c" } }; 12 int i=med3(w, 0, 1, 2); 13 14 Assert::AreEqual(w[i].num , 15); 15 } 16 TEST_METHOD(swapf_Test) 17 { 18 struct fre_word w[2] = { { 10,"a" },{ 15,"b" } }; 19 swapf(w, 0, 1); 20 Assert::AreEqual(w[0].num,15); 21 } 22 TEST_METHOD(vecswap_Test) 23 { 24 struct fre_word w[8] = { { 10,"a" },{ 15,"b" } ,{ 20,"c" },{ 25,"d" } ,{ 30,"e" },{ 35,"f" } ,{ 40,"g" },{ 45,"h" } }; 25 vecswap(w, 0, 4,2); 26 Assert::AreEqual(w[0].num, 30); 27 Assert::AreEqual(w[0].wd, "e"); 28 } 29 TEST_METHOD(qsort7_Test) 30 { 31 struct fre_word w[8] = { { 45,"h" } ,{ 15,"b" } ,{ 20,"c" },{ 10,"a" },{ 30,"e" },{ 35,"f" } ,{ 25,"d" } ,{ 40,"g" } }; 32 qsort7(w, 0, 7); 33 Assert::AreEqual(w[0].num, 10); 34 Assert::AreEqual(w[0].wd, "a"); 35 } 36 }; 37 }
一共包含4个测试,med3_Test用来测试三数取中这个函数,、swapf_Test用来测试两个结构体交换的函数、vecswap_Test测试结构体批量交换、qsort7_Test测试快速排序算法。
测试结果:
顺利通过。
但是在vs里没找到代码覆盖率那个功能,暂时缺这一项。
官网里教程是这样的:
而我的vs里是这个样子:
单元测试psp:
9月26日
类别 | 内容 | 开始时间 | 中断时间 | 结束时间 | 净时间 |
前期准备 | 看书查资料 | 15:00 | 0 | 15:22 | 22 |
前期准备 | 上网查单元测试 | 15:30 | 12 | 17:20 | 98 |
前期准备 | 上网查资料/练习vs单元测试 | 18:10 | 20 | 21:20 | 170 |
操作 | 编写单元测试 | 21:20 | 5 | 22:15 | 50 |
9月27日
类别 | 内容 | 开始时间 | 中断时间 | 结束时间 | 净时间 |
操作 | 重新编写单元测试 | 8:55 | 5 | 10:22 | 82 |
操作 | 修改测试 | 12:00 | 0 | 12:40 | 40 |
后期 | 写博客 | 16:00 | 0 | 16:28 | 28 |