Python 单元测试数据库访问层
我知道这个问题以前被问过很多次,但我有一些具体的代码示例,我想知道对它们进行单元测试是否有意义:Python 单元测试数据库访问层,python,database,unit-testing,Python,Database,Unit Testing,我知道这个问题以前被问过很多次,但我有一些具体的代码示例,我想知道对它们进行单元测试是否有意义: class FooAPI(object): def create(self, prop1, prop2, prop3, prop4, prop5): sql = "INSERT INTO foo (prop1, prop2, prop3) VALUES (?, ?, ?)" self.connection.execute(sql, (prop1, prop2
class FooAPI(object):
def create(self, prop1, prop2, prop3, prop4, prop5):
sql = "INSERT INTO foo (prop1, prop2, prop3) VALUES (?, ?, ?)"
self.connection.execute(sql, (prop1, prop2, prop3))
foo_id = self.connection.insert_id()
sql = "INSERT INTO foo_settings (foo_id, prop4, prop5) VALUES (?, ?, ?)"
self.connection.execute(sql, (foo_id, prop4, prop5))
return foo_id
def update(self, foo_id, prop1, prop2, prop3, prop4, prop5):
"Update code similar to above"
def delete(self, foo_id):
sql = "DELETE FROM foo WHERE foo_id = ?"
self.connection.execute(sql, (foo_id,))
def find(self, foo_id=None, prop1=None):
"Find objects by ID or by prop1"
对上述代码进行单元测试是否有意义,以及如何进行。这里有两个复杂的因素:
- 数据库本身并不简单,我目前没有简单的方法来创建包含所有测试数据的数据库
- 模式正在演变,这意味着不可能一次性创建测试数据库
我能想到的不测试的唯一好理由是,如果您希望很快完全更改数据库。根据您的要求,测试代码总是有意义的。也就是说,您在这里所做的是非常直接的,可能不需要测试。然而,我认为即使很难建立一个测试数据库,你也很可能在以后需要它,所以当你不想做一些复杂的事情时,你最好现在就做。此外,我们还发现模式正在演变。随着时间的推移,几乎不可避免地会有重大的数据库更改,您只需随机应变 我能想到的不进行测试的唯一好理由是,如果您希望很快完全更改数据库。单元测试(即没有数据库),而不是IMO。集成测试通常我认为这是一个好主意 数据库本身并不简单,我目前没有简单的方法来创建包含所有测试数据的数据库 如何维护模式?在你前进之前,你需要弄清楚这一点。 您能否在一个自动化步骤中从一个空白数据库转换到至少具有模式的数据库?我猜如果你没有一个好的系统来保持数据库的最新状态,那么Liquibase就不能帮到你 现在测试数据-保持所需的数据较小 单元测试(即没有数据库),而不是IMO。集成测试通常我认为这是一个好主意 数据库本身并不简单,我目前没有简单的方法来创建包含所有测试数据的数据库 如何维护模式?在你前进之前,你需要弄清楚这一点。 您能否在一个自动化步骤中从一个空白数据库转换到至少具有模式的数据库?我猜如果你没有一个好的系统来保持数据库的最新状态,那么Liquibase就不能帮到你
现在测试数据-保持所需的数据较小 是的,有一种初始化空白数据库的简单方法:我们使用SQLAlchemy来维护模型。测试数据更难处理,因为模式会定期更改。更改的频率如何?是的,有一种初始化空白数据库的简单方法:我们使用SQLAlchemy来维护模型。测试数据更难处理,因为模式会定期更改。更改的频率如何?