词频统计的单元测试
由于没有经验,我下了很多c++测试软件:比如csewin,c++test,check,cppunit但是都不会用。请教同学后才知道下载cppunit是要用vs安装。而不是看它自带的说明。
我知道了多看技术博客的重要性,能节省很多时间。
重新安装好cppunit后,用vs进行设置。
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大大减少你花在调试上面的时间。
首先看cmp函数,返回结果为指向函数的指针。为了qsort排序函数做准备。
1 int cmp(const void *a, const void *b) 2 { 3 List *p1 = (List*)a; 4 List *p2 = (List*)b; 5 if (p1->num != p2->num) 6 return p2->num - p1->num; 7 else 8 return strcmp(p1->w, p2->w); 9 }
主函数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 int main() 2 { 3 char word[MAX]; 4 FILE *bfp; 5 FILE *out; 6 char c; 7 int i, k, n; 8 struct tnode *root; 9 root = NULL; 10 bfp = fopen("c://special.txt", "r"); 11 while ((c = fgetc(bfp)) != EOF) { 12 ungetc(c, bfp); 13 for (i = 0; (c = fgetc(bfp)) != ' '&&c != '\n'&&c != EOF; i++) { 14 if ((c >= 'A'&&c <= 'Z') || (c >= 'a'&&c <= 'z')) { 15 c = tolower(c); 16 word[i] = c; 17 } 18 else 19 break; 20 } 21 word[i] = '\0'; 22 if (strlen(word)>0) 23 root = treewords(root, word); 24 } 25 treeprint(root); 26 for (i = 0; i<curr; i++) { 27 list[i].num = arr[i]->count; 28 strcpy(list[i].w, arr[i]->word); 29 } 30 n = curr; 31 qsort(list, n + 1, sizeof(list[0]), cmp); 32 out = fopen("wordfreq.txt", "w"); 33 for (k = 0; k<curr; k++) { 34 fprintf(out, "%s %d\n", list[k].w, list[k].num); 35 } 36 for (k = 0; k<100; k++) { 37 printf("%s %d\n", list[k].w, list[k].num); 38 } 39 fclose(bfp); 40 fclose(out); 41 return 0; 42 } 43 struct tnode *treewords(struct tnode *p, char *w) 44 { 45 int cond; 46 if (p == NULL) { 47 p = (struct tnode*)malloc(sizeof(struct tnode)); 48 strcpy(p->word, w); 49 p->count = 1; 50 p->left = p->right = NULL; 51 } 52 else if ((cond = strcmp(w, p->word)) == 0) { 53 p->count++; 54 } 55 else if (cond<0) { 56 p->left = treewords(p->left, w); 57 } 58 else 59 p->right = treewords(p->right, w); 60 return (p); 61 } 62 void treeprint(struct tnode *p) 63 { 64 if (p != NULL) { 65 treeprint(p->left); 66 arr[curr++] = p; 67 treeprint(p->right); 68 } 69 }
运行结果
测试方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #ifndef __TEST_H_ 2 #define __TEST_H_ 3 4 int cmp(const void *a, const void *b); 5 6 #endif
测试结果
因为c语言无法用JAVA的eclipse有集成的测试工具,所以安装真的很花时间。
9月26
类别 | 开始时间 | 结束时间 | 中断时间 | 净时间 |
查找资料 |
13:30 | 17:30 | 10m | 200m |
安装程序 | 19:00 | 21:00 | 10m | 100m |
查看单元测试资料 | 22:00 | 23:00 | 0m | 60m |
9月27日
类别 | 开始时间 | 结束时间 | 中断时间 | 共用时 |
安装vs cppunit及熟悉环境 | 9:00 | 11:20 | 10m | 130m |
编写程序 | 14:30 | 15:00 | 0m | 30m |
写博客 | 18:00 | 18:40 | 0m | 40m |