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'}
),
)