1.什么是单元测试
单元测试是指对软件中的最小可测试单元进行检查和验证的过程,通常是一个函数或方法,在Python中,单元测试通常是通过编写测试代码,对一个模块或一个类的方法进行检查。
单元测试的目的是为了确保代码的正确性,在修改代码或添加新功能的同时,能够快速、准确地检测出在其他地方是否出现了潜在的问题。
单元测试通常会和持续集成(continuous integration)一起使用,确保每次修改代码后都能够自动运行测试。
2.unittest框架简介
2.1 unittest框架概述
Python自带的unittest是一个测试框架,它提供了一种定义测试用例的方式,以及一些用于断言和执行测试的方法。
unittest可以方便地编写和执行测试用例,支持测试套件(test suite)、测试用例(test case)、测试装置(test fixture)等一系列测试相关的操作。
2.2 unittest框架常用断言方法
unittest框架提供了一系列的断言方法,用于检查代码执行的结果是否符合预期。常用断言方法有:
assertEqual(a, b)
断言a是否等于b;
assertNotEqual(a, b)
断言a是否不等于b;
assertTrue(x)
断言x是否为True;
assertFalse(x)
断言x是否为False;
assertIs(a, b)
断言a是否是b(即a is b);
assertIsNot(a, b)
断言a是否不是b(即a is not b);
assertIsNone(x)
断言x是否是None;
assertIsNotNone(x)
断言x是否不是None;
assertIn(a, b)
断言a是否是b中的元素;
assertNotIn(a, b)
断言a是否不是b中的元素。
3.单元测试实例
3.1 编写被测试类
下面是一个被测试类的代码,它实现了一个单例模式:
class Singleton(object):
__instance = None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super().__new__(cls, *args, **kwargs)
return cls.__instance
def __init__(self, value):
self.value = value
def get_value(self):
return self.value
3.2 编写测试类
下面是一个测试类的代码,它包含了一些对被测试类的方法的测试用例:
import unittest
from singleton import Singleton
class TestSingleton(unittest.TestCase):
def test_create_singleton(self):
s1 = Singleton(1)
s2 = Singleton(2)
self.assertEqual(s1, s2)
def test_singleton_value(self):
s1 = Singleton(1)
s2 = Singleton(2)
self.assertEqual(s1.get_value(), s2.get_value())
在测试类中,我们继承了unittest.TestCase类,并在其中定义了两个测试用例:
test_create_singleton方法测试是否能够创建出同一个实例;
test_singleton_value方法测试创建出的实例是否都能够正确返回value属性。
3.3 运行测试
下面是测试代码的运行结果:
python -m unittest test_singleton.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
测试运行结果显示,两个测试用例都通过了。
4.小结
单元测试是确保代码正确性的重要手段,它能够帮助我们快速、准确地检测出代码中的问题,并且可以与持续集成一起使用,确保每次修改代码后都能够自动运行测试。
Python自带的unittest框架提供了一系列用于测试的方法和工具,它可以方便地编写和执行测试用例。通过编写示例代码,我们可以看到unittest框架的使用方法。