我正在使用pymysql客户端库连接到真实的数据库。我在模块中有一个函数,我使用pymysql连接到数据库,只做数据库插入操作,如何在python中对这个函数进行单元测试,而不去真正的数据库呢?
import pymysql
def connectDB(self):
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db')
try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('newuser@some.com', 'newpassword'))
connection.commit()
我的python版本是2.7。
您可以使用
patch
,如下所示:您需要一系列名为stub的伪数据库,它们返回硬编码值。在测试期间,将使用这些存根而不是实际的数据库。我不熟悉Python,但是C++中的一种方法是让对象将数据库作为构造函数参数接收。在生产代码中,使用真实的数据库参数,在测试存根时使用。这是因为构造函数需要指向公共基类的指针。即使它不是为Python编写的,我建议阅读Roy Osherove的第一章:单元测试的艺术。这本书清楚地解释了为什么这些假数据库是存根而不是模拟。
您刚刚重新发现了测试之所以重要的一个最有说服力的原因:它告诉您什么时候设计不好。
换言之,可测试性是质量的良好一级代理。请考虑以下几点:
如果使用多个数据库,可以使用多态性,或者根据API的相似性,将特定的DB作为对象的构造函数参数。
相关问题 更多 >
编程相关推荐