【发布时间】:2011-08-31 18:44:28
【问题描述】:
我正在使用mock library,我希望能够通过以下方式模拟我的模型类的save() 函数:
应该调用两次原始函数(并成功实际保存模型),第三次应该抛出异常。
这是针对调用save 三次的函数的单元测试(并且此特定测试需要处理只有第三次调用失败的情况)。
【问题讨论】:
-
“失败”?这很奇怪。您是否正在测试以查看 ORM 的工作原理?您是否正在测试您的数据库是否有效?这些都是非常奇怪的测试。如果您正在测试以查看重复项是否被拒绝,则不需要模拟,只需一个夹具。你在测试什么?
-
我正在尝试测试我的代码对保存失败的反应,这可能由于各种原因而合法发生。我看不出固定装置在这里有什么帮助。
-
“保存失败”?我对此完全感到困惑。您是否尝试检测 RDBMS 中的故障?通过你的申请?那是大错特错了。如果 RDBMS 失败了,那么系统——作为一个整体——就太坏了,无法做出任何有效的断言。这不是你单元测试的那种想法。如果测试 RDBMS 故障,则必须测试 OS 故障、电源故障和其他随机天灾。为什么要停止使用 RDBMS?为什么不测试 Apache 故障? mod_wsgi 失败?
-
保存可能会失败,例如,这样做违反了某些约束。然而,这无关紧要。上面的问题是关于一般技术的,我真的不认为争论所讨论的特定测试是否有必要。如上所述,我将不胜感激有关以不同结果模拟重复调用的答案。对另一个固定装置与模拟评论战不感兴趣(如stackoverflow.com/questions/3813688/…)。
-
“保存可能会失败,例如,这样做违反了某些约束”。然后提供一个测试用例。不涉及嘲笑。既然你有一个非常优雅的例子,为什么不使用它呢?
标签: python django unit-testing mocking