欢迎访问宙启技术站
智能推送

Python单元测试框架unittest的使用方法

发布时间:2023-06-14 21:42:21

unittest是Python自带的一种单元测试框架,可以用它来进行单元测试,它简单易用,非常适合初学者使用,本篇文章将介绍unittest框架的使用方法。

一、unittest框架简介

unittest是Python自带的一个单元测试框架,用于编写和运行测试集,unittest包含了模拟运行环境、运行测试、丰富的断言库、结果输出等一整套测试操作。

unittest框架通过创建测试用例(test case)类以及测试方法(test method)来实现测试,测试用例类中的测试方法负责验证被测试的功能实现是否符合预期。

二、unittest框架的配置

使用unittest框架之前,需要进行一些配置,如下所示:

import unittest

class TestDemo(unittest.TestCase):
    def setUp(self):
        print('setUp')
        
    def tearDown(self):
        print('tearDown')

1. 导入unittest模块

2. 定义一个测试用例类:TestDemo。

3. 在测试用例类中定义setUp()和tearDown()方法。setUp()方法在执行每个测试方法之前调用,tearDown()方法在执行每个测试方法之后调用。

三、unittest框架的方法

unittest框架的使用方法很简单,测试方法要继承unittest.TestCase,并使用unittest框架提供的方法,下面介绍几个常用的方法:

1. assertEqual(a, b, [msg]):如果a == b,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        self.assertEqual(2 + 3, 5)

2. assertNotEqual(a, b, [msg]):如果a != b,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        self.assertNotEqual(2 + 3, 6)

3. assertTrue(expr, [msg]):如果expr为真,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        self.assertTrue(2 + 3 == 5)

4. assertFalse(expr, [msg]):如果expr为假,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        self.assertFalse(2 + 3 == 6)

5. assertIs(a, b, [msg]):如果a和b是同一个对象,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        a = [1, 2, 3]
        b = a
        self.assertIs(a, b)

6. assertIsNot(a, b, [msg]):如果a和b不是同一个对象,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        a = [1, 2, 3]
        b = [1, 2, 3]
        self.assertIsNot(a, b)

7. assertIn(a, b, [msg]):如果a是b的成员,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        a = 'a'
        b = 'abc'
        self.assertIn(a, b)

8. assertNotIn(a, b, [msg]):如果a不是b的成员,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        a = 'x'
        b = 'abc'
        self.assertNotIn(a, b)

9. assertRaises(exc, fun, *args, **kwds):如果调用fun(*args, **kwds)会抛出exc异常,则测试通过,否则测试失败。

class TestDemo(unittest.TestCase):
    def test_division(self):
        self.assertRaises(ZeroDivisionError, lambda: 1/0)

10. assertAlmostEqual(a, b, places=7, [msg]):如果a和b在places位精度上相等,则测试通过,否则测试失败。msg为可选参数,用于提示测试结果。

class TestDemo(unittest.TestCase):
    def test_add(self):
        a = 0.1 + 0.2
        b = 0.3
        self.assertAlmostEqual(a, b)

四、unittest框架的核心流程

unittest框架的核心流程如下图所示:

![unittest框架的核心流程](https://img-blog.csdn.net/20180308124640061)

1. 编写测试用例:编写测试用例,继承unittest.TestCase类,并在其中定义测试方法。

2. 测试套件:将需要测试的测试用例放在测试套件中。

3. 运行测试:通过执行测试套件中定义的某个测试方法或者整个测试套件来运行测试。

4. 断言:在测试方法中使用assertXxx方法验证测试结果是否正确。

5. 汇报测试结果:unittest框架会汇报测试结果。

五、unittest框架的实战

下面通过一个简单的测试用例来展示unittest框架的使用方法:

1. 编写测试用例

import unittest

class TestDemo(unittest.TestCase):
    def test_add(self):        # 测试加法
        self.assertEqual(2 + 3, 5)
        
    def test_subtract(self):   # 测试减法
        self.assertEqual(3 - 2, 1)

2. 测试套件

def suite():
    suite = unittest.TestSuite()
    suite.addTest(TestDemo('test_add'))
    suite.addTest(TestDemo('test_subtract'))
    return suite

3. 运行测试

if __name__ == '__main__':
    runner = unittest.TextTestRunner(verbosity=2)
    test_suite = suite()
    runner.run(test_suite)

4. 断言

在测试方法中使用assertXxx方法验证测试结果是否正确。

self.assertEqual(2 + 3, 5)

5. 汇报结果

运行后,会得到如下输出:

test_add (__main__.TestDemo) ... ok
test_subtract (__main__.TestDemo) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

测试结果表明,两个测试方法都通过了测试。

六、总结

unittest框架是Python自带的一种单元测试框架,我们可以使用它来进行单元测试,一般用于测试应用程序中的函数和方法等小的代码单元。unittest框架简单易用,本文介绍了unittest框架的基本使用方法,包括框架的配置、常用的方法、核心流程以及实战验证等,希望可以对初学者有所帮助。