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

一、编程思路

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

相关推荐