Python 如何为用于插入查询的通用方法编写测试

Python 如何为用于插入查询的通用方法编写测试,python,testing,Python,Testing,我有一个数据库类,这个类包含一个用于插入记录的方法。该方法的外观如下所示: def insertRecord(self, **kwargs): if 'table' not in kwargs.keys(): raise Exception('The table keyword is required') table = kwargs['table'] del kwargs['table'] query_fields = kwargs.keys

我有一个数据库类,这个类包含一个用于插入记录的方法。该方法的外观如下所示:

def insertRecord(self, **kwargs):
    if 'table' not in kwargs.keys():
        raise Exception('The table keyword is required')

    table = kwargs['table']
    del kwargs['table']

    query_fields = kwargs.keys()
    pg_fields = []

    for field in query_fields:
        pg_fields.append('%(' + field + ')s')

    query_field_string = ', '.join(query_fields)
    query_pg_string = ', '.join(pg_fields)

    self.cur.execute('INSERT INTO ' + table + '(' + 
        query_field_string + ') VALUES (' + query_pg_string + ')',
        kwargs
     )

    self.conn.commit()
该方法接受变量参数列表,因此用户可以使用该方法在任何表中插入条目。基本上,该方法是构造一个形式为INSERT INTO。。。值%field1s,%field2s…,因为execute方法接受形式的字典作为第二个参数:形式%fields的所有字符串将替换为相应的值


基本上,这个方法很好用,但我不知道该如何测试它。我是否应该创建一个测试数据库,并查看调用后传递给它的值是否在数据库中?如何为这种方法编写测试?

重构代码以格式化SQL命令,然后进行测试。通过这种方式,传递参数、获取格式化字符串和字典就简单多了。不需要嘲笑

来源
# python -m unittest insertrec

import unittest

def formatInsert(table, **kwargs):
    assert table

    query_fields = kwargs.keys()
    pg_fields = []

    for field in query_fields:
        pg_fields.append('%(' + field + ')s')

    query_field_string = ', '.join(query_fields)
    query_pg_string = ', '.join(pg_fields)

    return (
        'INSERT INTO ' + table + '(' + 
        query_field_string + ') VALUES (' + query_pg_string + ')',
        kwargs
    )


class TestInsert(unittest.TestCase):
    def test_err_notable(self):
        self.assertRaises(AssertionError, formatInsert, None)

    def test_insert1(self):
        self.assertEquals(
            formatInsert('mytab', beer='tasty'),
            ('INSERT INTO mytab(beer) VALUES (%(beer)s)', 
             {'beer': 'tasty'}
             ),
        )