将整数与MagicMock进行比较在python的unittest中不起作用

2024-03-23

我有一个类,它使用类变量来选择要执行的逻辑。

#in file1:

class SomeHelper():
    def __init__(self):
        self.my_var = 0

#in file2: 
import file1
class MyClass():
    ...
    ...
    def calculate():
        inst = file1.SomeHelper()
        if x > inst.my_var:
           etc etc

我正在编写一个单元测试并在另一个文件中模拟 SomeHelper() :

from file 2 import MyClass
# tried both
@patch('file2.file1') OR @patch('file2.file1.SomeHelper')
def test_calculate(self, mock_helper):
    mock_helper.my_var = 0
    to_test = MyClass.calculate()

我收到以下错误:

类型错误:“MagicMock”和“int”实例之间不支持“>”。

我以为我定义了my_var在我修补模块之后。


这是单元测试解决方案Python 3.7.5:

file1.py:

class SomeHelper():
    def __init__(self):
        self.my_var = 0

file2.py:

import file1


class MyClass():
    @classmethod
    def calculate(cls):
        x = 1
        inst = file1.SomeHelper()
        if x > inst.my_var:
            return True
        return False

test_file2.py:

import unittest
from unittest.mock import patch
from file2 import MyClass


class TestMyClass(unittest.TestCase):
    @patch('file2.file1')
    def test_calculate(self, mock_file1):
        inst = mock_file1.SomeHelper.return_value
        inst.my_var = 0.5
        to_test = MyClass.calculate()
        self.assertTrue(to_test)
        mock_file1.SomeHelper.assert_called_once()

    @patch('file2.file1')
    def test_calculate_2(self, mock_file1):
        inst = mock_file1.SomeHelper.return_value
        inst.my_var = 2
        to_test = MyClass.calculate()
        self.assertFalse(to_test)
        mock_file1.SomeHelper.assert_called_once()


if __name__ == '__main__':
    unittest.main()

带有覆盖率报告的单元测试结果:

..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK
Name                                       Stmts   Miss  Cover   Missing
------------------------------------------------------------------------
src/stackoverflow/50242955/file1.py            3      1    67%   3
src/stackoverflow/50242955/file2.py            8      0   100%
src/stackoverflow/50242955/test_file2.py      16      0   100%
------------------------------------------------------------------------
TOTAL                                         27      1    96%

源代码:https://github.com/mrdulin/python-codelab/tree/master/src/stackoverflow/50242955 https://github.com/mrdulin/python-codelab/tree/master/src/stackoverflow/50242955

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

将整数与MagicMock进行比较在python的unittest中不起作用 的相关文章

随机推荐

  • 如何从 PHP 调用 dup2() 系统调用?

    有一个eio dup2 http php net manual en function eio dup2 php函数来自Eio PECL 扩展 http php net manual en intro eio php但我对所有异步和事件循环
  • WinForms 表单冻结

    在表单 F1 上我有一个按钮 如果我创建另一个表单 我们称之为F2 并显示它没有问题 但我想做这样的事情 我的应用程序中的某些线程正在运行连接并侦听来自服务器的消息 当消息到达时 我的主窗体被注册以获取运行函数的事件 从该函数中 我尝试创建
  • 如何列出命名空间的功能?

    我想知道如何列出 Clojure 命名空间的所有函数 我已经做了一些研究 但还没有做到这一点 我已经了解了如何使用 show 方法列出 Java 类的方法 show java awt Graphics 为了列出 Clojure 命名空间的功
  • Python:concurrent.futures 如何使其可取消?

    Python concurrent futures 和 ProcessPoolExecutor 提供了一个简洁的接口来调度和监视任务 期货甚至provide https docs python org 3 library concurren
  • Angular 4 验证器可同时检查 2 个控件

    我有一个带有 2 个控件 port start 和 port end 的反应式表单 它们具有以下要求 两者都必须有一个值 它们的值必须介于 0 到 65535 之间 port start 值必须小于 port end 值 这是我到目前为止所
  • 在 SimpleXML 中美化/格式化输出

    我有一个 simplexml 脚本 用于发布从表单输入的数据 xml simplexml load file links xml sxe new SimpleXMLElement xml gt asXML person sxe gt add
  • 无法使用SED快速编辑文件

    该文件最初是 cat so app yaml application SO 我运行以下命令 我得到一个空文件 sed s SO so so app yaml gt so app yaml cat so app yaml 如何使用 SED 编
  • Silverlight Windows Phone 7:从 URL 加载图像

    我得到下面的代码 它试图将网络上的图像加载到图像控件中 当我运行它时 我在给定的行上收到错误 不允许网络访问 private void button1 Click object sender RoutedEventArgs e WebCli
  • 使用CRTP时如何避免错误?

    Using CRTP http en wikipedia org wiki Curiously recurring template pattern有时我会写这样的代码 this was written first struct Foo B
  • 水平步骤中的等待栏,matlab

    我正在尝试修改这段代码 h waitbar 0 Please wait for i 1 10 computation here waitbar i 10 end close h 我如何将 waitbar 分为 10 个步骤 我的意思是它应该
  • 如何从 JavaScript 中的字符串中去除 HTML 标签? [复制]

    这个问题在这里已经有答案了 如何在 JavaScript 中从字符串中去除 HTML cleanText strInputCode replace lt gt gt g 蒸馏自这个网站 web archive https web archi
  • 在一个查询中搜索多个表 (MySQL/PHP#)

    我有大约 15 个表 每个表包含大约 10 000 行和大约 30 列 我希望我的网站的用户能够搜索零件编号或产品 说明并显示结果 不管它在哪张桌子上 每个产品页面与每个对应表的名称相同 因此 如果找到产品 它只会显示正确页面的链接 文件名
  • 如果没有 google-services.json,Google 服务插件将无法运行 [重复]

    这个问题在这里已经有答案了 文件 google services json 丢失 Google 服务插件无法运行 自从我删除了我的内容后 我收到此错误代码google services json我的项目中的文件 现在解决这个问题的明显方法是
  • Spark CDH 5.7 上的 Hive - 无法创建 Spark 客户端

    我们在使用 Spark 引擎执行 Hive 查询时收到错误 执行spark任务失败 出现异常 org apache hadoop hive ql metadata HiveException 创建失败 Spark 客户端 失败 执行错误 返
  • 指定网格中的行数和列数

    有没有办法指定网格中的行数和列数 我的代码给了我 3 列和 4 行 我想要 4 列和 3 行 有没有办法用 CSS 和 HTML 来实现这一点 我也愿意使用 Bootstrap 尝试正确编辑下面的代码 grid container disp
  • 如何在terraform创建后显示ec2实例的公共IP

    我想在 terraform 执行后显示 terraform 创建的 aws instance 的 public ip 但是 仅显示第一台服务器的全局 IP 我的源代码如下 resource aws instance main count 3
  • 合并两个按月计数的查询

    灵感来自这个问题在Meta上 https meta stackexchange com questions 57692 have the new bounty changes caused more bounties to appear 我
  • MVC3全球化:模型绑定之前需要全局过滤器

    目前 我有一个名为的全局过滤器GlobalizationFilter检查路由值 cookie 和浏览器语言标头以确定请求的正确区域性设置 public override void OnActionExecuting ActionExecut
  • Ruby on Rails 中通过 sprocket 进行源映射

    我想在我正在开发的 Rails 3 2 应用程序上添加源映射支持 据我所知 Sprockets 不支持生成源地图 从其 github 页面来看 该功能似乎计划在 4 0 中使用 我正在使用 Sprockets 2 2 我认为猴子修补是唯一的
  • 将整数与MagicMock进行比较在python的unittest中不起作用

    我有一个类 它使用类变量来选择要执行的逻辑 in file1 class SomeHelper def init self self my var 0 in file2 import file1 class MyClass def calc