我正在努力对一个不返回任何内容并执行删除操作的函数进行单元测试。功能如下:
def removeReportParseData(self, report_id, conn=None):
table_id = dbFind(
"select table_id from table_table where report_id=%s", (report_id), conn
)
for t in table_id:
self.removeTableParseData(int(t["table_id"]), conn)
dbUpdate("delete from table_table where table_id=%s", t["table_id"], conn)
我想确保命令已经执行,但不想影响实际的数据库。我目前的代码是:
def test_remove_report_parse_data(self):
with patch("com.pdfgather.GlobalHelper.dbFind") as mocked_find:
mocked_find.return_value = [123, 232, 431]
mocked_find.assert_called_once()
提前感谢您的支持
我不相信不执行SQL就可以执行SQL,可以这么说,但是如果您使用的是MySQL,那么通过将查询包装在
START TRANSACTION;
和ROLLBACK;
中,您可能会非常接近您想要的内容即,您可以将查询替换为:
这将证明您的函数在不实际更改数据库内容的情况下工作
但是,如果只测试这些函数是否可以执行任何查询就足够了,您也可以选择使用空查询来测试它们,并简单地断言dbFind和dbUpdate方法的调用次数与您预期的一样多
不过,正如我在评论中提到的,我强烈建议不要让您的测试套件与开发数据库交互
虽然在为测试设置另一个数据库时肯定会涉及一些配置,但您应该能够找到一些样板代码来轻松地完成这项工作,因为这是非常常见的做法
相关问题 更多 >
编程相关推荐