Python 中的连接单元测试

Connection unit testing in Python

我是 Python 单元测试的新手,我不确定如何创建此功能的单元测试 returns 一个连接?

def connection(self):
    connection = mysql.connector.connect(host='localhost', 
                     database='test',
                     user='user', 
                     password='password',
                     auth_plugin='mysql_native_password')
    return connection

您可以模拟 mysql.connector.connect 并确保它被调用,但老实说,这可能太小 unit 无法为您的单元测试提供任何好处。这只是委托对 mysql.connector.connect 的调用,它本身应该被测试(由 mysql 包)。

class TestConnection(unittest.TestCase):
    @unittest.mock('module_under_test.mysql.connector.connect')
    def test_connection(self, mockconnect):
        module_under_test.connection()
        mockconnect.assert_called()

我想你也可以检查以确保它总是 returns something (以防止将来的修订忘记 return 出功能.

    # inside test_connection as above
        connection = module_under_test.connection()
        self.assertIsNotNone(connection)
        mockconnect.assert_called()

我最近为我创建的自定义 class 做了这个,它包装了 Python 的 Oracle MySQL 连接器。我会做类似下面的事情:

import unittest
import mysql.connector

class TestConnection(unittest.TestCase):
    """Oracle MySQL for Python Connector tests."""

    connection = None

    def setUp(self):
        config = {
            user = 'user',
            password = 'password',
            host = 'localhost',
            database = 'test',
            auth_plugin = 'mysql_native_password'
        }
        self.connection = mysql.connector.connect(**config)

    def tearDown(self):
        if self.connection is not None and self.connection.is_connected():
            self.connection.close()

    def test_connection(self):
        self.assertTrue(self.connection.is_connected())

if __name__ == '__main__':
    unittest.main()

该解决方案基于setUp()tearDown()方法,分别在每个测试之前和之后执行unittest提供的方法。这允许我们连接到数据库,运行 进行简单的连接测试,然后关闭连接。这确保了单元测试完成后没有挂起的连接。