对计算器和单词检索程序进行单元测试
Posted dbefb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对计算器和单词检索程序进行单元测试相关的知识,希望对你有一定的参考价值。
一、编程思路
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:计算器单元测试、覆盖率测试,英文检索单元测试、覆盖率测试。
以上是关于对计算器和单词检索程序进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章