1

我是 Python 单元测试的新手,我不确定如何创建一个返回连接的函数的单元测试?

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

2 回答 2

3

您可以模拟mysql.connector.connect并确保它被调用,但老实说,这可能是一个太小的单元,无法为您的单元测试提供任何好处。这只是委托一个调用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()

我想你也可以检查以确保它总是返回一些东西(以防止将来的修订忘记到return函数之外。

    # inside test_connection as above
        connection = module_under_test.connection()
        self.assertIsNotNone(connection)
        mockconnect.assert_called()
于 2018-11-12T03:12:57.990 回答
0

我最近为我创建的一个自定义类执行了此操作,该类包装了适用于 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这允许我们连接到数据库,运行一个简单的连接测试,然后关闭连接。这确保了单元测试完成后没有挂起的连接。

于 2019-04-18T11:35:57.690 回答