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

一、编程思路

 

  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:计算器单元测试、覆盖率测试英文检索单元测试、覆盖率测试

 

posted @ 2020-03-06 16:56  认真学习的小朋友  阅读(318)  评论(0编辑  收藏  举报