对计算器和单词检索程序进行单元测试

一、编程思路

  1、图逻辑框图

  2、确定测试用例

  3、进行单元、覆盖率测试

二、代码实现

  1、计算器单元测试

  首先对照代码画了类似下图的简单逻辑框图

然后对照每一个判断节点,设计了一些测试用例,在调试过程中会发现代码的一些缺陷,然后增加或者修改测试用例,下图是测试过程中的报错例子截图:

下面贴出最后完成的测试代码:

 1 ‘‘‘test 计算器.py‘‘‘
 2 import unittest
 3
 4 from 计算器 import *
 5
 6 import HTMLTestRunner
 7
 8 class TestCaculator(unittest.TestCase):
 9     ‘‘‘test 计算器‘‘‘
10     def test_conversionFormula(self):
11         ‘‘‘test method conversionFormula‘‘‘
12         self.assertEqual([‘1‘, ‘+‘, ‘(‘, ‘2‘, ‘+‘, ‘3‘, ‘)‘], conversionFormula(‘1+(2+3)‘))
13         self.assertEqual([‘1‘, ‘+‘, ‘2‘, ‘*‘, ‘3‘], conversionFormula(‘1+2*3‘))
14         self.assertEqual(‘ERROR‘, conversionFormula(‘1(2,3)‘))
15         self.assertEqual(‘ERROR‘, conversionFormula(‘1,2,3‘))
16         self.assertEqual(‘ERROR‘, conversionFormula(‘1*(2++3)‘))
17         self.assertEqual(‘ERROR‘, conversionFormula(‘1*(2/0)‘))
18         self.assertEqual(‘ERROR‘, conversionFormula(‘a*(2+3)‘))
19         self.assertEqual(‘ERROR‘, conversionFormula(‘1/(2+3))‘))
20         self.assertEqual(‘ERROR‘, conversionFormula(‘!&@‘))
21         self.assertEqual(‘ERROR‘, conversionFormula(‘*2‘))
22         self.assertEqual(‘ERROR‘, conversionFormula(‘‘))
23         self.assertEqual(‘ERROR‘, conversionFormula(‘123‘))
24         self.assertEqual
25     def test_calculator(self):
26         ‘‘‘test method calculator‘‘‘
27         self.assertEqual(27,calculator([‘2‘,‘^‘,‘3‘,‘*‘,‘2‘,‘+‘,‘13‘,‘-‘,‘4‘,‘/‘,‘2‘]))
28         self.assertEqual(3,calculator([‘-‘,‘2‘,‘^‘,‘2‘,‘*‘,‘2‘,‘+‘,‘13‘,‘-‘,‘4‘,‘/‘,‘2‘]))
29         self.assertEqual(1,calculator([‘+‘,‘1‘]))
30         self.assertEqual(‘ERROR‘,calculator([‘*‘,‘2‘]))
31     def test_remove_racket(self):
32         ‘‘‘test method remove_racket‘‘‘
33         self.assertEqual([‘7.0‘], remove_bracket([‘-‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘+‘,‘2‘,‘)‘,‘)‘]))
34         self.assertEqual([‘1‘, ‘-‘, ‘7.0‘], remove_bracket([‘1‘,‘+‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘+‘,‘2‘,‘)‘,‘)‘]))
35         self.assertEqual([‘-‘,‘5.0‘], remove_bracket([‘-‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘-‘,‘2‘,‘)‘,‘)‘]))
36 def main():
37     filepath = ‘F:/multisim/VsCode/软件工程学习/计算器单元测试、覆盖率测试/test_calculator_report.html‘
38
39     ftp=open(filepath,‘wb‘)
40     suite = unittest.TestSuite()
41     suite.addTest(TestCaculator(‘test_conversionFormula‘))
42     suite.addTest(TestCaculator(‘test_calculator‘))
43     suite.addTest(TestCaculator(‘test_remove_racket‘))
44     runner=HTMLTestRunner.HTMLTestRunner(stream=ftp,title=‘test_caculator‘)
45     runner.run(suite)
46
47 if __name__ == ‘__main__‘:
48     main()
49
50     # unittest.main(verbosity=2)

测试过程中就对计算器程序进行了一些修改和完善,下面是测试完后的截图和html报告:

下面是代码覆盖率测试代码,用的coverage库

import coverage
cov = coverage.Coverage()
cov.start()

import test_caculator
test_caculator.main()

cov.stop()
cov.save()
cov.html_report(directory=‘F:/multisim/VsCode/软件工程学习/计算器单元测试、覆盖率测试/计算器覆盖率报告‘)

同样可以生成html报告文档

  2、单词检索单元测试

单词检索的程序比较简单,没有很多的逻辑判断,所以测试的用例比较少,下面贴出测试代码:

 1 ‘‘‘测试ChapterTwoExercises.py‘‘‘
 2 import unittest
 3
 4 from unittest import mock
 5
 6 from ChapterTwoExercises import *
 7
 8 import HTMLTestRunner
 9
10
11 class TestChapterTwoExercises(unittest.TestCase):
12     ‘‘‘测试 TxtHandle‘‘‘
13     def setUp(self):
14         self.txt_handle = TxtHandle(‘D:\桌面\eng2.txt‘, ‘D:\桌面\query.txt‘)
15
16     def test_init_query_file(self):
17         self.assertRaises(TypeError, TxtHandle, (1,‘D:\桌面\query.txt‘))
18         self.assertRaises(TypeError, TxtHandle, (‘D:\桌面\eng2.txt‘,2))
19
20     def test_file_analysis(self):
21         self.txt_handle.file_analysis()
22
23
24
25
26
27 def main():
28     filepath = ‘F:/multisim/VsCode/软件工程学习/英文检索单元测试、覆盖率测试/test_ChapterTwoEx.html‘
29     ftp=open(filepath,‘wb‘)
30
31     suite = unittest.makeSuite(TestChapterTwoExercises)
32
33     # unittest.main(verbosity=2)
34     runner=HTMLTestRunner.HTMLTestRunner(stream=ftp,title=‘test_ChapterTwoEx‘)
35     runner.run(suite)
36
37 if __name__ == ‘__main__‘:
38
39     main()
40
41
42     

覆盖率测试代码:

import coverage
cov = coverage.Coverage()
cov.start()

import test_game_map
test_game_map.main()

cov.stop()
cov.save()
cov.html_report(directory=‘F:/multisim/VsCode/软件工程学习/覆盖率测试‘)

单元测试报告和覆盖率测试报告和计算器的一个格式,就不贴出截图了。

计算器和单词检索程序的测试文件、测试报告、修改后的文件都已经打包成两个文件上传github:计算器单元测试、覆盖率测试英文检索单元测试、覆盖率测试

原文地址:https://www.cnblogs.com/dbefb/p/12427356.html

时间: 2024-10-14 04:30:43

对计算器和单词检索程序进行单元测试的相关文章

单词检索

单词检索(search) \(Description\) 小可可是学校图书馆的管理员,现在他接手了一个十分棘手的任务. 由于学校需要一些材料,校长需要在文章中检索一些信息.校长一共给了小可可N篇文章,每篇文章为一个字符串.现在,校长需要他找到这样的单词,它至少在这N篇文章中的M篇文章里出现过,且单词长度为L.可是,工作量十分庞大,但校长又急需小可可完成这项任务. 现在他向你求助,需要你编写程序完成这项艰巨的任务. \(Input\) 第1行3个正整数N,M,L,表示文章的数目,单词至少出现在M篇

《C++ Primer》P314中使用insert重写单词统计程序的扩展

编写程序统计并输出所读入的单词出现的次数 想与习题10-1相结合,也就是先输入几组 map<string, int>类型,存入vector中. 再输入单词word,如果已经存在则在key对应的value+1 如果不存在,则插入并使得其value为1. 之前的问题是->输入了一次之后,再要输入单词word,读不进.(呵呵 果然小白) 看到11章之后,知道要用语句cin.clear;使得输入流重新有效. 再然后 重新熟悉了iterator对map的操作. #include <iostr

单词查找程序

在一个文件中查找指定单词所在的行,简单实现了,没有进行异常处理: #include<stdio.h> #include<string.h> int main() { int maxword=1024; int i=0; char word[50]; char line[maxword]; FILE *fp=fopen("a.txt","r"); printf("请输入要查找的单词\n"); scanf("%s&q

第一章 flex单词计数程序

学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 %{ int chars = 0; int words = 0; int lines = 0; %} %% [a-zA-Z]+ { words++; chars += strlen(yytext); } \n { chars++; lines++; } . { chars++; } %% main(int a

使用VS2013进行C#程序的单元测试(转)

没有按照预期的那样做出成功的单元测试,磕磕绊绊参照了下面两篇博客大致做出来了,所以很有必要记录一下过程. http://www.cnblogs.com/duasonir/p/5299732.html(照着这个我成功的做出了单元测试) http://www.cnblogs.com/Look_Sun/p/4514732.html(这个我几乎研究了一天,但是最后还是没有做出来,最后看到上面那位同学的参考的内容和这篇一样,拜读之后也作出了半成品) 由于程序都是简单加法,而且我自己的思想并没有加入其中,项

运行Hadoop自带的wordcount单词统计程序

0.前言 前面一篇<Hadoop初体验:快速搭建Hadoop伪分布式环境>搭建了一个Hadoop的环境,现在就使用Hadoop自带的wordcount程序来做单词统计的案例. 1.使用示例程序实现单词统计 (1)wordcount程序 wordcount程序在hadoop的share目录下,如下: [[email protected] mapreduce]# pwd /usr/local/hadoop/share/hadoop/mapreduce [[email protected] mapr

第六篇:Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)

需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入两个文件,其一内容如下: hello world hello hadoop hello mapreduce 另一内容如下: bye world bye hadoop bye mapreduce 对应上面给出的输入样例,其输出样例为: bye   3 hadoop 2 hello 3 mapreduce 2 world 2 方案制定 对该案例,可设计出如下的MapRe

iOS开发 简述使用OCUnit对程序进行单元测试(UnitTest)

所谓单元测试(又称为模块测试, Unit Testing)就是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作. 其实在我们开发的程序实现某个功能的时候我们也有进行测试.只不过,你是在项目代码中直接写的方法,而且在测试的时候,也是点点点,点到相应的界面才触发相应的方法,进行测试,这测试效率,想想也是醉了,不过还好能正常测试,但是如果你想控制不同的输入参数呢?好,你说直接写入到程序.但是,你测试完成了之后呢?好,你说那就注释掉啊.但是,如果后面你改动了又需要再测试一此呢?其实,说了这么

iOS开发 使用OCUnit对程序进行单元测试(UnitTest)

所谓单元测试(又称为模块测试, Unit Testing)就是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作. 其实在我们开发的程序实现某个功能的时候我们也有进行测试.只不过,你是在项目代码中直接写的方法,而且在测试的时候,也是点点点,点到相应的界面才触发相应的方法,进行测试,这测试效率,想想也是醉了,不过还好能正常测试,但是如果你想控制不同的输入参数呢?好,你说直接写入到程序.但是,你测试完成了之后呢?好,你说那就注释掉啊.但是,如果后面你改动了又需要再测试一此呢?其实,说了这么