与其他测试用例一起运行时 Django 单元测试失败

2023-11-27

我的 Django 单元测试行为不一致。在我使用 sqlite 的开发机器上,如果我分别在两个应用程序上运行测试,测试就会通过,但是如果我运行manage.py test为了一次测试所有内容,我开始在两次测试中一致地获得单元测试失败。

在我使用 Postgres 的临时服务器上,我有一个特定的测试,可以在单独测试时起作用(例如manage.py test MyApp.tests.MyTestCase.testSomething),但在运行整个测试用例时失败(例如manage.py test MyApp.tests.TestCase).

其他相关的StackOverflow问题似乎有两种解决方案:

  1. 使用 Django TestCase 代替 Python 的等效项
  2. 使用 TransactionTestCase 确保每次测试后正确清理数据库。

我两种方法都试过了,都没有用。出于沮丧,我也尝试使用 django-nose 代替,但我看到了同样的错误。我使用的是 Django 1.6。


我刚刚花了一整天的时间调试类似的问题。就我而言,问题如下。

在我的视图函数之一中,我使用了 Djangosend_mail()功能。在我的测试中,我没有让它在每次运行测试时向我发送电子邮件,而是patched send_mail在我的测试方法中:

from mock import patch
...

def test_stuff(self):
    ...

    with patch('django.core.mail.send_mail') as mocked_send_mail:

    ...

这样,在调用我的视图函数后,我可以测试它send_mail被调用:

self.assertTrue(mocked_send_mail.called)

这在单独运行测试时工作正常,但在与套件中的其他测试一起运行时失败。失败的原因是,当它作为套件的一部分运行时,其他视图会被提前调用,从而导致views.py文件被加载,导致send_mail待进口before我有机会patch它。所以当send_mail在我看来,这是实际的send_mail被调用的,不是我的修补版本。当我单独运行测试时,该函数被嘲笑before它是导入的,因此修补版本最终会在以下情况下导入:views.py已加载。这种情况在模拟文档以前读过几遍,但现在经过艰苦的学习后已经明白了......

解决方案很简单:而不是打补丁django.core.mail.send_mail我刚刚修补了已导入的版本views.py - myapp.views.send_mail。换句话说:

with patch('myapp.views.send_mail') as mocked_send_mail:
...

这花了我很长时间来调试,所以我想我会分享我的解决方案。我希望它也适合你。您可能没有使用模拟,在这种情况下,这可能对您没有帮助,但我希望它会对某人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与其他测试用例一起运行时 Django 单元测试失败 的相关文章

  • 如何在 akka actor 中测试公共方法?

    我有一个 akka 演员 class MyActor extends Actor def recieve def getCount id String Int do a lot of stuff proccess id do more st
  • Jquery 和 Django 多个复选框

    我是 jquery 的初学者 所以请耐心等待 我有一个 jquery 函数 允许我选择多个复选框并创建一个字符串 如下所示 function getSelectedVals var tmp input name checks each fu
  • Python unittest - 使用列表断言字典

    在为我的班级编写一些测试时 我遇到了有趣的简单问题 我想断言两个字典包含一些列表 但是这个列表可能不会以相同的方式排序 gt 这会导致测试失败 Example def test myobject export into dictionary
  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • 使用 Django Rest 保存 Base64ImageField 类型会将其保存为原始图像。如何将其转换为普通图像

    我的模型中有 5 个图像字段 imageS imageS imageS imageS 和 imageE 我正在尝试按以下方式保存图像 图像的类型Base64ImageField images imageA imageB imageC ima
  • 在django中将子类模型实例转换为另一个子类模型实例?

    我有一个 ModelBase ModelA ModelB 我想将模型实例更改为模型实例 我可以处理他们的属性差异 我看过相关问题 但对我来说不太有用 如何从现有的基本模型实例创建继承的 django 模型实例 https stackover
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • 如何仅在特定错误退出值(0 除外)上将 Jenkins 构建标记为成功?

    当我运行Execute shell构建步骤来执行脚本并且该脚本返回0 Jenkins将构建标记为SUCCESS 否则它将其标记为FAILURE这是预期的默认行为0表示没有错误 任何其他值表示有错误 有没有办法将构建标记为SUCCESS仅当返
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Django 管理列降序排序

    当使用 Django admin 时格拉佩利 https github com sehmaschine django grappelli我希望单击列标题即可按降序对表格进行排序 我不希望通过在模型元类中定义排序字段来对列进行默认排序 默认行
  • 如何在 Django Rest Framework 中将当前用户设置为用户字段?

    我有以下代码完美运行 我可以创建一个Post通过选择图像和用户从 DRF 面板中获取对象 但是我希望 DRF 由当前登录的用户填充用户字段 模型 py class Post TimeStamped user models ForeignKe
  • 如何添加身份验证中间件 JWT django?

    我正在尝试创建一个中间件来使用 JWT 进行身份验证 但在视图中 request user 始终是 AnonymUser 当我验证中间件通过用户模型更改 request user 时 确实如此 但在到达视图时 由于某种原因 request
  • 确定网站的唯一访问者

    我正在创建一个 django 网站 使用 Apache2 作为服务器 我需要一种方法来以完整的证据方式确定我的网站 特别是每个页面 的唯一访问者数量 不幸的是 用户会有很大的动机去尝试 玩弄 跟踪系统 所以我正在努力证明这一点 有什么办法可
  • 我应该在哪里对对象和字段进行 django 验证?

    我正在创建一个 Django 应用程序 它使用 Django Rest Framework 和普通的 django views 作为用户的入口点 我想对模型的独立字段以及整个对象进行验证 例如 字段 根据正则表达式函数输入的车牌是否正确 与
  • 在一个视图中使用两个模板

    我尝试以两种方式呈现视图中的内容 html 和 csv 下载 我能够做到这一点的唯一方法是使用两种不同的视图 一种用于 html 演示 一种用于 csv 这重复了我的代码 我正在寻找更优雅的解决方案 有什么建议么 这是示例代码 views
  • 如何在 django 视图中向另一台服务器发送请求?

    我想发送一个http向我的另一台服务器发出请求django view像这样 def django view request response send request http example com result do something
  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • AngularJS 和 PouchDB 服务的单元测试

    我正在尝试对我的个人 Angular 工厂进行单元测试 但很难尝试正确模拟和注入 PouchDB 对象 我的工厂代码目前如下 factory Track function var db new PouchDB tracks var reso
  • django 根据 UserProfile.language() 字段数据发送本地化电子邮件

    在我的优惠网站中 如果优惠满足某些要求 模型中指定的过滤器 用户可以设置电子邮件警报 因此 当用户 A 添加报价时 post save 信号将发送到 celery 并检查是否应用了用户警报过滤器 如果有 则发送电子邮件 问题是我不知道如何安
  • Django Rest Framework 序列化器中的聚合(和其他带注释的)字段

    我正在尝试找出添加带注释字段的最佳方法 例如将任何聚合 计算 字段添加到 DRF 模型 序列化器 我的用例只是一种情况 端点返回的字段未存储在数据库中 而是从数据库计算得出 让我们看下面的例子 模型 py class IceCreamCom

随机推荐

  • 如何强制客户端刷新 JavaScript 文件?

    We are currently working in a private beta and so are still in the process of making fairly rapid changes although obvio
  • 最少登录插入

    我有一个INSERT该语句占用了大量日志空间 以至于在该语句完成之前硬盘驱动器实际上已被填满 问题是 我really不需要记录它 因为它只是中间数据上传步骤 为了论证的缘故 假设我有 表 A 初始上传表 使用填充bcp 所以没有日志记录问题
  • OmniAuth 不适用于 Rails3 中的路由通配

    我正在尝试遵循 Railscast 241简单的 OmniAuth除非我在末尾有路由通配 否则它工作得很好 config routes rb match uri gt posts index 如果我要求 auth twitter使用 glo
  • Paramiko 身份验证失败,并显示“同意​​‘rsa-sha2-512’公钥算法”(以及 sshd 日志中的“不支持的公钥算法:rsa-sha2-512”)

    我有一个在 CentOS Linux 7 7 上运行的 Python 3 应用程序 对远程主机执行 SSH 命令 它工作正常 但今天我在对 新 远程服务器 基于 RHEL 6 10 的服务器 执行命令时遇到了一个奇怪的错误 遇到 RSA 密
  • GraphQL:从同级解析器访问另一个解析器/字段输出

    需要一些帮助 假设我请求以下数据 parent obj1 value1 obj2 value2 我需要 value1 解析器中 value2 的结果进行计算 想过在 value2 中返回一个承诺并以某种方式将其放入 value1 解析器中
  • 限制未定义行为造成的混乱?

    据我从阅读中了解到 未定义行为是编译器在编译时留下几个不同的替代方案的结果 然而 这是否意味着如果遵循严格的编码实践 例如将每个赋值和每个相等放在单独的语句中 正确的调试和注释 那么在查找未定义的来源时就不应该造成重大问题 行为 此外 对于
  • VB.Net Webview2 如何获取html源代码?

    我在 VB net Visual Studio 2017 项目中成功在 WebView2 上显示网站 但无法获取 html 源代码 请告诉我如何获取 html 代码 My code Private Sub testbtn Click sen
  • 数据绑定到嵌套属性?

    我对 WPF 和 XAML 还很陌生 现在我已经被数据绑定困扰好几天了 我只是想将一些嵌套属性绑定到 TextBox 和 ListView 通过 XAML 但我做错了 这是我的示例代码 MainWindow xaml cs namespac
  • Firebase Deeplink 不调用 Swift 3 中 AppDelegate 的 application:continueUserActivity:restorationHandler 函数

    我正在使用 firebase Deeplink URL 打开我的应用程序的特定部分 当应用程序在后台运行时它运行良好 但是当我杀死应用程序并从外部单击深层链接 url 时 我不知道如何处理这种情况 我的意思是我应该在哪里编写条件以获取 ur
  • 如何检测并删除仅包含空值的列?

    在我的桌子上table1有 6 列位置 a b c d e Locations a b c d e 1 10 00 Null Null 20 00 Null 2 Null 30 00 Null Null Null 我需要这样的结果 Loca
  • JSP、GET 和 POST 参数

    我需要用JSP做一些小任务 对 JSP 很陌生 我想知道是否有可能只获得GET或仅POST来自 HTTP 请求的参数 我见过ServletRequest getParameter 和类似的 但似乎这些方法都得到了 GETand开机自检参数
  • CSS 滚动捕捉在到达顶部时溢出主体

    我有一个非常奇怪的问题 也许是一个错误scroll snaps行为 当我到达页面顶部并继续向上滚动时 如果我不再向下滚动 则正文会溢出并停留在那里 即使我重新加载页面 仅在 Chrome for Mac 版本 75 0 3770 100 官
  • 如何在 Sails.js 中提供自定义模型验证消息?

    如何在 Sails js 中提供自定义模型验证消息 Sails js 返回的验证消息对用户不友好 因此我想为 required minLength 等规则提供自定义验证消息 但不知道如何实现 它不在文档中 我还检查了 Anchor js w
  • Windows 上的 Apache/PHP 中禁用 OpenSSL 支持

    openssl 被禁用 apache2 4 和 php7 1 在 phpinfo 中 结果给了我这个 OpenSSL 支持已禁用 安装 ext openssl 我在 php ini 中更改了这一点 扩展名 php openssl dll 我
  • Django:获取查询集的补充

    我得到某个模型的查询集 我想得到它的补充 即该模型的所有实例not在上述查询集中 我怎样才能做到这一点 简短的解决方案 qs Model objects filter qs with objects to exclude result Mo
  • 找不到变量:$

    var scriptFile tempNode attr customJScriptSrc 当通过这个我得到 参考错误 找不到变量 请建议我任何替代方法 添加这个脚本 位于文档顶部 在 javascript 代码之前添加 或者下载该库并在代
  • 请求未到达控制器但仍收到 200 响应

    我正在玩弹簧安全并试图确保一个安静的应用程序 但后来遇到了这个相当荒谬的问题 我的控制器上的所有操作都很好 请求被接受 但请求实际上从未到达控制器 并且始终返回 200 没有任何内容 我的安全配置如下所示 package com bpawa
  • 使用滑动 TabLayout 以编程方式更改选项卡

    我正在使用滑动Tab布局谷歌提供的示例 我正在尝试以编程方式切换回片段内的dialogView 内的第一个选项卡 我看到一个scrollToTab int tabIndex intpositionOffset 我怎样才能调用它返回到第一个选
  • 将 YouTube 视频嵌入

    我通过在互联网上找到的片段嵌入了 YouTube 的视频 以下是我使用的代码 interface FirstViewController Private void embedYouTube NSString urlString frame
  • 与其他测试用例一起运行时 Django 单元测试失败

    我的 Django 单元测试行为不一致 在我使用 sqlite 的开发机器上 如果我分别在两个应用程序上运行测试 测试就会通过 但是如果我运行manage py test为了一次测试所有内容 我开始在两次测试中一致地获得单元测试失败 在我使