对计算器和单词检索程序进行单元测试
一、编程思路
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