软件测试实验3

一、 实验目的

1.掌握单元测试技术,并按单元测试的要求设计测试用例。

2.掌握一种单元测试工具的使用。

 

二、 实验内容

行学习C#pythonC++的其中一种单元测试工具的使用,自选一段单元代码(不少于15行),进行测试。完成实验报告。

三、实验步骤及结果

1. 被测代码选择

我选择了一个简单的计算器类作为被测代码,包含加法、减法、乘法和除法四种基本运算,代码如下:

 

class Calculator:

    """简单的计算器类"""

    

    def add(self, a, b):

        """加法运算"""

        return a + b

    

    def subtract(self, a, b):

        """减法运算"""

        return a - b

    

    def multiply(self, a, b):

        """乘法运算"""

        return a * b

    

    def divide(self, a, b):

        """除法运算"""

        if b == 0:

            raise ValueError("除数不能为零")

        return a / b

    

    def calculate(self, operation, a, b):

        """根据操作符计算结果"""

        operations = {

            '+': self.add,

            '-': self.subtract,

            '*': self.multiply,

            '/': self.divide

        }

        if operation not in operations:

            raise ValueError("不支持的操作符")

        return operations[operation](a, b)

2. 测试用例设计

根据单元测试的要求,我为每个方法设计了多个测试用例,包括正常情况和边界情况:

 

  1. 加法测试

测试场景

输入参数

预期输出

测试要点

正整数相加

(2, 3)

5

基本功能验证

负数相加

(-1, -1)

-2

负数处理

小数相加

(0.1, 0.2)

0.3

浮点数精度

零值相加

(0, 5)

5

边界条件

 

  1. 减法测试

测试场景

输入参数

预期输出

测试要点

正数相减

(5, 3)

2

基本功能

结果为负

(3, 5)

-2

负数结果

小数相减

(0.3, 0.1)

0.2

浮点数精度

相同数相减

(5, 5)

0

边界条件

 

  1. 乘法测试

测试场景

输入参数

预期输出

测试要点

正数相乘

(2, 3)

2

基本功能

负数相乘

(-2, 3)

-2

符号处理

小数相乘

(0.1, 0.2)

0.02

浮点数精度

乘以零

(5, 0)

0

边界条件

 

  1. 除法测试

测试场景

输入参数

预期输出

测试要点

整数除法

(6, 3)

2

基本功能

小数结果

(1, 3)

0.333

循环小数

相同数相除

(5, 5)

1

边界条件

除数为零

(5, 0)

抛出异常

异常处理

 

  1. 综合计算测试

测试场景

输入参数

预期输出

测试要点

加法运算

('+', 2, 3)

5

基本功能

不支持操作符

('%', 5, 3)

抛出异常

异常处理

除法异常传递

('/', 5, 0)

0.2

异常传递

 

 

 

 

3. 测试代码实现

import unittest

from calculator import Calculator

 

class TestCalculator(unittest.TestCase):

    """Calculator类的单元测试"""

    

    def setUp(self):

        """在每个测试方法前执行"""

        self.calc = Calculator()

    

    def test_add(self):

        """测试加法"""

        self.assertEqual(self.calc.add(2, 3), 5)

        self.assertEqual(self.calc.add(-1, 1), 0)

        self.assertAlmostEqual(self.calc.add(0.1, 0.2), 0.3, places=7)

        self.assertEqual(self.calc.add(0, 5), 5)

    

    def test_subtract(self):

        """测试减法"""

        self.assertEqual(self.calc.subtract(5, 3), 2)

        self.assertEqual(self.calc.subtract(3, 5), -2)

        self.assertAlmostEqual(self.calc.subtract(0.3, 0.1), 0.2, places=7)

        self.assertEqual(self.calc.subtract(5, 5), 0)

    

    def test_multiply(self):

        """测试乘法"""

        self.assertEqual(self.calc.multiply(2, 3), 6)

        self.assertEqual(self.calc.multiply(-2, 3), -6)

        self.assertAlmostEqual(self.calc.multiply(0.1, 0.2), 0.02, places=7)

        self.assertEqual(self.calc.multiply(5, 0), 0)

    

    def test_divide(self):

        """测试除法"""

        self.assertEqual(self.calc.divide(6, 3), 2)

        self.assertAlmostEqual(self.calc.divide(1, 3), 0.3333333, places=7)

        self.assertEqual(self.calc.divide(5, 5), 1)

        with self.assertRaises(ValueError):

            self.calc.divide(5, 0)

    

    def test_calculate(self):

        """测试calculate方法"""

        self.assertEqual(self.calc.calculate('+', 2, 3), 5)

        self.assertEqual(self.calc.calculate('-', 5, 3), 2)

        self.assertEqual(self.calc.calculate('*', 2, 3), 6)

        self.assertEqual(self.calc.calculate('/', 6, 3), 2)

        with self.assertRaises(ValueError):

            self.calc.calculate('%', 5, 3)

        with self.assertRaises(ValueError):

            self.calc.calculate('/', 5, 0)

 

if __name__ == '__main__':

unittest.main()

 

截图:

 

 

 

 

 

四、个人体会

 

  通过本次实验,我掌握了单元测试的基本概念和重要性,如何使用Python的unittest框架编写单元测试,如何设计全面的测试用例,包括正常情况和异常情况,如何使用断言方法验证结果,如何测试异常情况。

单元测试是保证代码质量的重要手段,通过编写全面的测试用例,可以在早期发现代码中的问题,提高代码的可靠性和可维护性。今后在开发中,我将坚持为每个模块编写单元测试,确保代码质量。

posted @ 2025-06-12 16:41  chrisrmas、  阅读(15)  评论(0)    收藏  举报