词频统计的单元测试

  由于没有经验,我下了很多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 }

主函数

 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 != '
'&&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] = '';
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
", list[k].w, list[k].num);
35     }
36     for (k = 0; k<100; k++) {
37         printf("%s %d
", 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 }
View Code

运行结果

测试方法

1 #ifndef __TEST_H_  
2 #define __TEST_H_  
3 
4 int cmp(const void *a, const void *b);
5 
6 #endif 
View Code

测试结果

  因为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

                                 

原文地址:https://www.cnblogs.com/brilliant2016/p/5917509.html