详解Django中的unittest及应用

Dylan
Dylan
发布时间:2026-10-14 | 7人浏览过
原创

本文深入解析Django项目中Python unittest单元测试框架的核心用法。详细阐述assert断言机制、TestCase类的setUp/tearDown生命周期管理,以及TextTestRunner的执行流程。通过unittest.main()和TestSuite两种启动方式,结合具体代码示例,展示如何高效构建和管理自动化测试用例。

unittest是Python标准库中内置的单元测试框架,用于编写和运行测试脚本。

关于断言

断言用于验证实际结果与预期结果是否一致。若结果符合预期,程序无额外输出;若不符合,则抛出AssertionError异常。若断言语句中指定了msg参数,则异常信息将返回该msg内容。


assert 2 == 2
assert 2 == 1 * 2
assert 2 + 0 == 1 * 2
# ----------------- 以上无任何返回效果
 
assert 1 > 3, 'wrong'
'''
Traceback (most recent call last):
  File "D:/project_of_3期课程/day22/类.py", line 259, in <module>
    assert 1 > 3, 'wrong'
AssertionError: wrong
'''

unittest模块属性说明

unittest的属性

unittest.main()函数可将单元测试模块转换为可直接运行的脚本。该函数利用TestLoader类自动查找模块内所有以“test”开头的测试方法并执行。执行顺序遵循ASCII码规则:数字(0-9)优先于大写字母(A-Z),大写字母优先于小写字母(a-z)。因此,以A开头的测试用例会优先于以a开头的用例执行。

unittest.TestSuite()类用于创建测试套件,以便将多个测试用例组合在一起运行。

unittest.TextTestRunner()类负责运行测试套件中组装的测试用例。通过调用其run()方法,并传入suite测试套件作为参数,即可执行测试。

TestCase类的属性

setUp()方法用于在测试用例执行前进行初始化工作。例如,若测试涉及数据库操作,可在此建立数据库连接并初始化数据;若测试涉及Web浏览器交互,可在此实例化浏览器对象。

tearDown()方法用于在测试用例执行后执行清理工作。例如,关闭数据库连接或关闭浏览器窗口。

assert*()系列断言方法用于判断测试通过与否。测试是否通过取决于实际结果与预期结果是否相等。

assertEqual(a, b, [msg='测试失败时打印的信息']): 断言a与b是否相等。若相等,测试用例通过。

assertNotEqual(a, b, [msg='测试失败时打印的信息']): 断言a与b是否不相等。若不相等,测试用例通过。

assertTrue(x, [msg='测试失败时打印的信息']): 断言x是否为True。若为True,测试用例通过。

assertFalse(x, [msg='测试失败时打印的信息']): 断言x是否为False。若为False,测试用例通过。

assertIs(a, b, [msg='测试失败时打印的信息']): 断言a是否指向对象b。若是,测试用例通过。

assertNotIs(a, b, [msg='测试失败时打印的信息']): 断言a是否不指向对象b。若不是,测试用例通过。

assertIsNone(x, [msg='测试失败时打印的信息']): 断言x是否为None。若是,测试用例通过。

assertIsNotNone(x, [msg='测试失败时打印的信息']): 断言x是否不为None。若不是,测试用例通过。

assertIn(a, b, [msg='测试失败时打印的信息']): 断言a是否在序列b中。若在,测试用例通过。

assertNotIn(a, b, [msg='测试失败时打印的信息']): 断言a是否不在序列b中。若不在,测试用例通过。

assertIsInstance(a, b, [msg='测试失败时打印的信息']): 断言a是否为类b的实例。若是,测试用例通过。

assertNotIsInstance(a, b, [msg='测试失败时打印的信息']): 断言a是否不是类b的实例。若不是,测试用例通过。

TextTestRunner的属性

run()方法用于运行测试套件中的测试用例,入参为suite测试套件。


unittest.TextTestRunner(verbosity=2).run(suite)

unittest框架使用

方式一:使用unittest.main()启动单元测试模块。


# coding=utf-8
import unittest
# 方式一:unittest.main()来启动单元测试模块
class MyTestCase(unittest.TestCase):
    def setUp(self):
        print('测试环境')
 
    def test(self):
        print('测试用例')
        self.assertEquals(4, 2 * 2)
        self.assertEqual(1, 3, 'something was wrong')
    def tearDown(self):
        print('环境销毁')
if __name__ == '__main__':
    unittest.main()

方式二:将测试用例添加到TestSuite集合中,再加载所有被测试对象。


# coding=utf-8<br>import unittest<br><br>class TestCase(unittest.TestCase):
    def test1(self):
        print('one')
 
    def test2(self):
        print('two')
 
class TestCase1(unittest.TestCase):
    def test1(self):
        print('three')
 
    def test2(self):
        print('four')
 
if __name__ == '__main__':
    un1 = unittest.TestLoader().loadTestsFromTestCase(TestCase)
    un2 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
 
    suite = unittest.TestSuite([un1, un2])
    unittest.TextTestRunner(verbosity=2).run(suite)

至此,关于Django中unittest框架及其应用的介绍已完成。如需了解更多相关技术内容,建议查阅本站往期文章或继续浏览后续教程。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表