实验三 单元测试

实验项目名称:实验  单元测试        

一、 实验目的

  1. 掌握单元测试技术,理解如何设计测试用例。
  2. 学习并掌握 Python 中的一种单元测试工具(unittest)的使用方法。

 

二、 实验内容

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

三、 实验步骤及结果

1. 选择语言与工具:选用Python语言及内置的`unittest`框架,因其简单易用且适合初学者。

2. 目标代码:设计一个包含加减乘除操作的`Calculator`类,每个方法均包含参数类型检查及必要的逻辑验证(如除法的除零检查)。

python

class Calculator:

    def add(self, a, b):

        if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):

            raise TypeError("参数必须为数值类型")

        return a + b

 

    def subtract(self, a, b):

        if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):

            raise TypeError("参数必须为数值类型")

        return a - b

    def multiply(self, a, b):

        if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):

            raise TypeError("参数必须为数值类型")

        return a * b

    def divide(self, a, b):

        if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):

            raise TypeError("参数必须为数值类型")

        if b == 0:

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

        return a / b

 测试用例设计

使用`unittest`框架编写测试类,覆盖正常输入、边界值及异常情况:

python

import unittest

from calculator import Calculator

class TestCalculator(unittest.TestCase):

    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.assertEqual(self.calc.add(0, 0), 0)

        with self.assertRaises(TypeError):

            self.calc.add("a", 3)

    测试减法

    def test_subtract(self):

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

        self.assertEqual(self.calc.subtract(-1, -2), 1)

        with self.assertRaises(TypeError):

            self.calc.subtract(2, "b")

    测试乘法

    def test_multiply(self):

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

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

        with self.assertRaises(TypeError):

            self.calc.multiply("a", 2)

    测试除法

    def test_divide(self):

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

        with self.assertRaises(ValueError):

            self.calc.divide(5, 0)

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

        self.assertEqual(self.calc.divide(5, 2), 2.5)

        with self.assertRaises(TypeError):

            self.calc.divide(4, "c")

 

if __name__ == '__main__':

    unittest.main()

 

四、 个人体会

一开始面对陌生的单元测试工具,内心有些忐忑。我选择了 Python 的 unittest 框架,虽然 Python 之前接触过,但对单元测试工具的使用并不熟悉。

我先仔细研读了 unittest 框架的官方文档,了解其基本概念、测试用例编写方式、断言方法等。然后开始动手实现 Calculator 类的功能代码,想着先把代码主体写出来再测试。在实现过程中,我考虑了各种正常输入情况,比如简单的加减乘除运算,也尝试加入了参数类型检查,避免非数值类型参与运算引发错误,还为除法操作加上了除零检查。

接着进入单元测试环节,我按照文档示例搭建测试类,逐渐编写各个测试用例。在测试加法时,先写了正常数值相加的测试,顺利通过。又想着极端情况,比如负数相加、零加零,结果也都符合预期。可当我故意传入一个字符串和数字相加时,成功触发了预先设想的 TypeError,心里还挺有成就感。

测试减法、乘法过程相对顺利,基本沿用了加法的思路。不过在写除法测试用例时,我先验证了正常除法运算,然后尝试除以极小的接近零的浮点数,观察是否会抛出异常,发现程序能正确报错,这让我对代码的健壮性有了信心。

通过这次实验,我深刻体会到单元测试对提升代码质量的重要性,它能及时发现潜在问题,为后续开发提供保障,也让我明白了在编程时要充分考虑各种边界和异常情况,而且熟悉掌握一种单元测试工具对软件开发流程非常关键,后续能更高效地进行代码验证与维护。

 

posted @ 2025-05-21 11:27  痛苦代码源  阅读(25)  评论(0)    收藏  举报