10 使用unittest进行测试之编写和运行unittest
在上一篇中,我们对 unittest
框架进行了介绍,了解了它的基本结构和功能。在本篇教程中,我们将重点讨论如何编写和运行 unittest
测试用例,以及如何使用它们来验证代码的正确性。我们将通过具体案例来进行详细的讲解和示范。
1. 编写测试用例
unittest
框架允许我们通过创建继承自 unittest.TestCase
的类来编写测试用例。下面是一个简单的示例,我们将测试一个计算器类的方法。
示例代码
首先,假设我们有一个简单的计算器类 Calculator
,其实现如下:
# calculator.py
class Calculator:
def add(self, x, y):
return x + y
def subtract(self, x, y):
return x - y
def multiply(self, x, y):
return x * y
def divide(self, x, y):
if y == 0:
raise ValueError("Cannot divide by zero!")
return x / y
接下来,我们将为 Calculator
类编写测试用例:
# test_calculator.py
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
def setUp(self):
"""在每个测试之前执行"""
self.calculator = Calculator()
def test_add(self):
"""测试加法"""
self.assertEqual(self.calculator.add(1, 2), 3)
self.assertEqual(self.calculator.add(-1, 1), 0)
self.assertEqual(self.calculator.add(-1, -1), -2)
def test_subtract(self):
"""测试减法"""
self.assertEqual(self.calculator.subtract(3, 2), 1)
self.assertEqual(self.calculator.subtract(-1, -1), 0)
def test_multiply(self):
"""测试乘法"""
self.assertEqual(self.calculator.multiply(2, 3), 6)
self.assertEqual(self.calculator.multiply(-1, 5), -5)
def test_divide(self):
"""测试除法"""
self.assertEqual(self.calculator.divide(6, 2), 3)
self.assertEqual(self.calculator.divide(-4, 2), -2)
with self.assertRaises(ValueError):
self.calculator.divide(1, 0)
if __name__ == '__main__':
unittest.main()
代码解析
- 我们创建了一个类
TestCalculator
,该类继承自unittest.TestCase
。 - 在
setUp
方法中,我们初始化了一个Calculator
实例。该方法在每个测试方法运行之前被调用。 - 每个测试方法以
test_
开头,代表这是一个测试用例。 - 使用
self.assertEqual()
验证预期结果和实际结果是否相等。 - 使用
self.assertRaises()
来测试是否抛出特定的异常。
2. 运行测试
要运行我们编写的测试用例,可以在命令行中执行以下命令:
python -m unittest test_calculator.py
如果测试通过,则会显示一条类似于以下的信息:
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK
如果有某个测试失败,输出将显示哪些测试失败了,及其原因。
3. 测试结果分析
测试的输出信息是非常重要的,它帮助我们快速定位问题。如果某一个测试的结果不符合预期,unittest
会打印出实际结果与预期结果的对比信息,这样我们就可以清楚地看到哪里出了问题。
4. 小结
在本篇教程中,我们学习了如何使用 unittest
框架来编写和运行测试用例。通过具体的案例,我们了解了如何使用 unittest
提供的断言和异常处理功能来验证代码的行为。
在下一篇教程中,我们将深入探讨 unittest
中的测试用例和测试套件的概念,带你进一步掌握如何组织和管理测试,提高测试的灵活性和可维护性。
希望你对这个章节的内容有所收获!如果你有任何问题或需要进一步的示范,请随时提问。