我有2个测试正在测试一个调用外部模块的视图。我用mock.patch
嘲笑了它。我使用django的测试客户端来调用视图。
第一个测试(返回404的测试)成功完成,并调用正确的模拟。
当第二个测试运行时,一切都正常运行,但是被测试代码可以访问的模拟是上一次测试的模拟。
您可以在此示例https://dpaste.de/7zT8中看到测试输出中的ID不正确(第91行附近)。
这在哪里被缓存?我最初的想法是,由于urlconf的原因导致主模块的导入以某种方式在测试运行之间缓存。通过源代码追踪,我无法找到这种情况。
预期:两项测试均通过。
实际:由于过时的模拟导入,第二次测试失败。
如果我评论404测试,则另一个测试通过。
该视图在url conf中注册为字符串-y版本'repos.views.github_webhook'
。
答案 0 :(得分:2)
我不完全了解导致您看到的确切行为的原因,尤其不是为什么模拟在第一次测试中似乎正常工作。但是根据模拟文档,您应该在测试中的命名空间中进行修补,即patch("views.tasks")
。
http://www.voidspace.org.uk/python/mock/patch.html#where-to-patch