对计算器和单词检索程序进行单元测试
一、编程思路
1、图逻辑框图
2、确定测试用例
3、进行单元、覆盖率测试
二、代码实现
1、计算器单元测试
首先对照代码画了类似下图的简单逻辑框图
然后对照每一个判断节点,设计了一些测试用例,在调试过程中会发现代码的一些缺陷,然后增加或者修改测试用例,下图是测试过程中的报错例子截图:
下面贴出最后完成的测试代码:
‘‘‘test 计算器.py‘‘‘ import unittest from 计算器 import * import HTMLTestRunner class TestCaculator(unittest.TestCase): ‘‘‘test 计算器‘‘‘ def test_conversionFormula(self): ‘‘‘test method conversionFormula‘‘‘ self.assertEqual([‘1‘, ‘+‘, ‘(‘, ‘2‘, ‘+‘, ‘3‘, ‘)‘], conversionFormula(‘1+(2+3)‘)) self.assertEqual([‘1‘, ‘+‘, ‘2‘, ‘*‘, ‘3‘], conversionFormula(‘1+2*3‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘1(2,3)‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘1,2,3‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘1*(2++3)‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘1*(2/0)‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘a*(2+3)‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘1/(2+3))‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘!&@‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘*2‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘‘)) self.assertEqual(‘ERROR‘, conversionFormula(‘123‘)) self.assertEqual def test_calculator(self): ‘‘‘test method calculator‘‘‘ self.assertEqual(27,calculator([‘2‘,‘^‘,‘3‘,‘*‘,‘2‘,‘+‘,‘13‘,‘-‘,‘4‘,‘/‘,‘2‘])) self.assertEqual(3,calculator([‘-‘,‘2‘,‘^‘,‘2‘,‘*‘,‘2‘,‘+‘,‘13‘,‘-‘,‘4‘,‘/‘,‘2‘])) self.assertEqual(1,calculator([‘+‘,‘1‘])) self.assertEqual(‘ERROR‘,calculator([‘*‘,‘2‘])) def test_remove_racket(self): ‘‘‘test method remove_racket‘‘‘ self.assertEqual([‘7.0‘], remove_bracket([‘-‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘+‘,‘2‘,‘)‘,‘)‘])) self.assertEqual([‘1‘, ‘-‘, ‘7.0‘], remove_bracket([‘1‘,‘+‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘+‘,‘2‘,‘)‘,‘)‘])) self.assertEqual([‘-‘,‘5.0‘], remove_bracket([‘-‘,‘(‘,‘2‘,‘-‘,‘3‘,‘*‘,‘(‘,‘1‘,‘-‘,‘2‘,‘)‘,‘)‘])) def main(): filepath = ‘F:/multisim/VsCode/软件工程学习/计算器单元测试、覆盖率测试/test_calculator_report.html‘ ftp=open(filepath,‘wb‘) suite = unittest.TestSuite() suite.addTest(TestCaculator(‘test_conversionFormula‘)) suite.addTest(TestCaculator(‘test_calculator‘)) suite.addTest(TestCaculator(‘test_remove_racket‘)) runner=HTMLTestRunner.HTMLTestRunner(stream=ftp,title=‘test_caculator‘) runner.run(suite) if __name__ == ‘__main__‘: main() # 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、单词检索单元测试
单词检索的程序比较简单,没有很多的逻辑判断,所以测试的用例比较少,下面贴出测试代码:
‘‘‘测试ChapterTwoExercises.py‘‘‘ import unittest from unittest import mock from ChapterTwoExercises import * import HTMLTestRunner class TestChapterTwoExercises(unittest.TestCase): ‘‘‘测试 TxtHandle‘‘‘ def setUp(self): self.txt_handle = TxtHandle(‘D:\桌面\eng2.txt‘, ‘D:\桌面\query.txt‘) def test_init_query_file(self): self.assertRaises(TypeError, TxtHandle, (1,‘D:\桌面\query.txt‘)) self.assertRaises(TypeError, TxtHandle, (‘D:\桌面\eng2.txt‘,2)) def test_file_analysis(self): self.txt_handle.file_analysis() def main(): filepath = ‘F:/multisim/VsCode/软件工程学习/英文检索单元测试、覆盖率测试/test_ChapterTwoEx.html‘ ftp=open(filepath,‘wb‘) suite = unittest.makeSuite(TestChapterTwoExercises) # unittest.main(verbosity=2) runner=HTMLTestRunner.HTMLTestRunner(stream=ftp,title=‘test_ChapterTwoEx‘) runner.run(suite) if __name__ == ‘__main__‘: main()
覆盖率测试代码:
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:计算器单元测试、覆盖率测试,英文检索单元测试、覆盖率测试。
相关推荐
蛰脚踝的天蝎 2020-11-10
Cocolada 2020-11-12
TuxedoLinux 2020-09-11
snowphy 2020-08-19
83540690 2020-08-16
lustdevil 2020-08-03
83417807 2020-07-19
张文倩数据库学生 2020-07-19
bobljm 2020-07-07
83417807 2020-06-28
86427019 2020-06-28
86427019 2020-06-25
zhengzf0 2020-06-21
tobecrazy 2020-06-16
宿命java 2020-06-15
83417807 2020-06-15
84284855 2020-06-11