Mj.patch在django测试运行之间没有重置

时间:2015-05-31 07:54:36

标签: django

我有2个测试正在测试一个调用外部模块的视图。我用mock.patch嘲笑了它。我使用django的测试客户端来调用视图。

第一个测试(返回404的测试)成功完成,并调用正确的模拟。

当第二个测试运行时,一切都正常运行,但是被测试代码可以访问的模拟是上一次测试的模拟。

您可以在此示例https://dpaste.de/7zT8中看到测试输出中的ID不正确(第91行附近)。

这在哪里被缓存?我最初的想法是,由于urlconf的原因导致主模块的导入以某种方式在测试运行之间缓存。通过源代码追踪,我无法找到这种情况。

预期:两项测试均通过。

实际:由于过时的模拟导入,第二次测试失败。

如果我评论404测试,则另一个测试通过。 该视图在url conf中注册为字符串-y版本'repos.views.github_webhook'

1 个答案:

答案 0 :(得分:2)

我不完全了解导致您看到的确切行为的原因,尤其不是为什么模拟在第一次测试中似乎正常工作。但是根据模拟文档,您应该在测试中的命名空间中进行修补,即patch("views.tasks")

http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch