cunit单元测试

以md5测试为例子,练习了cunit这个单元测试工具。 要写一个测试用例,只需要遵循用例的框架编写就好了。 我们应该要清楚自己编写的函数的输入是什么,输出是什么。然后使用cunit的断言看结果是否符合预期,是的话测试通过,否则说明编码有问题。 就这次将要编写的md5为例,需要测试两个函数,一个是输入字符串,输出计算后的md5值,另一个是输入文件路径,输出文件的md5值。所以用例是否通过的条件就是计算的md5值是否正确。 先来看看main函数 :::c int main(int argc, const char *argv[]) { return run_test(); } 没什么特别的,就是运行了run_test这个函数。 再来看看run_test :::c int run_test() { if(CU_initialize_registry()) { exit(EXIT_FAILURE); } else { AddTests(); /**** Automated Mode ***************** CU_set_output_filename("TestMax"); CU_list_tests_to_file(); CU_automated_run_tests(); //************************************/ /*********basic mode**************/ // CU_basic_set_mode(CU_BRM_VERBOSE); // CU_basic_run_tests(); /*********console mode**************/ CU_console_run_tests(); CU_cleanup_registry(); return CU_get_error(); } } 开始变得有趣了,我们看到运行cunit,先要执行CU_initialize_registry(),成功后运行我们写的AddTests添加测试用例,接着运行测试模式,这里有三种,我用了第三种控制台模式。最后return退出。 接着来看看我们的AddTests做了什么工作。 :::c void AddTests() { assert(NULL != CU_get_registry()); assert(!CU_is_test_running()); if(CUE_SUCCESS != CU_register_suites(suites)) { exit(EXIT_FAILURE); } } 原来AddTests的动作就是注册suites。那么什么是suites? ...

July 25, 2013

一些有趣的c题目

最近几天都发现了一些c语言的有趣的c题目,有些还蛮实用的。 ##题目1 请问下面的程序打印的是什么? :::c #include <stdlib.h> #include <stdio.h> int main(int argc, const char *argv[]) { unsigned int a =6; int b = -20; (a+b > 6) ? printf("bigger than 6 \n") : printf("not bigger than 6 \n"); printf("a+b is %u\n",a+b); return 0; } 答案是bigger than 6,然后a+b是4294967295 这个问题涉及到c语言算术运算的隐式转换,对于本例子,a+b的结果被转换为了无符号数再和6做比较,结果可想而知,关于隐式转换,这里有一篇不错的文章:http://www.hookcn.org/2011/01/implicit-conversions-of-usual.html ##题目2 有个数组a[100]存放了100个数,这100个数取自1-99,且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值。 答案: :::c int searchRepeatNumber(const int * a,int length){ int noRepeatNumber; int totalNumber = 0; int loopnumber; if(length <= 0 || a == NULL){ return -1; } noRepeatNumber = (length*(length - 1)) >> 1; for(loopnumber = 0; loopnumber < length; loopnumber++){ totalNumber += a[loopnumber]; } return totalNumber - noRepeatNumber; } 我这个解答的时间复杂度是O(n),因为有一个循环。思路很简单,计算数组里面的数的总和,减去没有重复数的总和,得到的就是那个重复数了。 ...

March 28, 2013