实验三 单元测试
实验项目名称:实验三 单元测试
一、 实验目的
- 掌握单元测试技术,理解如何设计测试用例。
- 学习并掌握 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,心里还挺有成就感。
测试减法、乘法过程相对顺利,基本沿用了加法的思路。不过在写除法测试用例时,我先验证了正常除法运算,然后尝试除以极小的接近零的浮点数,观察是否会抛出异常,发现程序能正确报错,这让我对代码的健壮性有了信心。
通过这次实验,我深刻体会到单元测试对提升代码质量的重要性,它能及时发现潜在问题,为后续开发提供保障,也让我明白了在编程时要充分考虑各种边界和异常情况,而且熟悉掌握一种单元测试工具对软件开发流程非常关键,后续能更高效地进行代码验证与维护。

浙公网安备 33010602011771号