问题标签 [magicmock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 Python 中使用 MagicMock 时面临的问题
我是 Python 新手。我正在尝试使用 MagicMock 编写一个 UT,如下所示:
在这里,我面临如下错误:
即使我正在嘲笑 fetch_cursor_records 如下:
我仍然面临以下问题:
编辑 :
我可以用我发布的答案解决上述问题。但它似乎适用于 Python 3.7。但根据要求,我必须使用 python 3.6 进行相同的测试。然后它开始失败。
虽然我创建了 mock @patch(DBFactory.get_db_for_env)
,但 DBFactory 类的 get_db_for_env() 函数实际上在使用 python 3.6 运行单元测试时被调用。我对如何解决这个问题一无所知。
python - 如何指导魔术模拟应如何处理其论点
我遇到了以下(边缘?)我不知道如何正确处理的情况。一般的问题是
- 我有一个要测试的功能
- 在那个函数中,我调用一个以生成器理解作为参数的外部函数
- 在我的测试中,我模拟了外部函数
- 现在产品代码和测试代码不同:在产品中,生成器被消耗,模拟不这样做
这是我的代码库中的简化示例:
测试运行得很好,对我所关心的一切都足够好。但是当我coverage
在代码上运行时,我在摘要中描述的情况变得明显:
->exit
coverage.py 中的语法解释。
鉴于理解可以执行我确实想要运行的相关业务逻辑,因此错过的覆盖范围是相关的。它只是random.randint
在这里调用,但它可以做任何事情。
解决方法:
- 我可以只使用列表推导。代码被调用,每个人都很高兴。除了我,他必须修改他们的后端才能缓和测试。
- 我可以在测试期间进入模拟,抓住调用 arg,然后手动展开它。这可能看起来很糟糕。
- 我可以对函数进行monkeypatch,而不是使用magicmock,类似这样的
monkeypatch.setattr('itertools.accumulate', lambda x: [*x])
描述性很强。但是我将失去像我的示例中那样进行调用断言的能力。
我认为一个好的解决方案是这样的,遗憾的是它不存在:
python - Python unittest:无法模拟导入的函数,因此条件评估为 False
我在 Python 中遇到单元测试问题。具体来说,当我尝试模拟我的代码导入的函数时,分配给该函数输出的变量被分配给一个 MagicMock 对象,而不是模拟函数的 return_value。我一直在研究 python 的 unittest 库的文档,但没有任何运气。
以下是我要测试的代码:
这是我尝试过的:
我遇到的问题是,当测试进入variable = functionB
MyClass 时,变量没有设置为我的返回值;它被设置为一个 MagicMock 对象(因此 if 语句总是计算为 True)。如何模拟导入的函数,以便在执行时变量实际上设置为返回值而不是 MagicMock 对象本身?
python - 迭代 Mock 返回值
我正在尝试模拟返回列表的方法。设置后return_value
,它仍然返回一个 Mock 对象而不是列表,所以我不能迭代那个对象。
我要测试的功能示例:
测试示例:
总之,db_engine.execute(query).fetchall()
必须返回列表,所以我可以迭代query_result
,但它不会发生。尽管在attributequery_result
中有正确的值return_value
,但我无法对其进行迭代。
python - 似乎无法在另一个文件中修补类和方法
我一直在用这样的小模型把头撞在墙上:
这是树:
在 file_a 中:
在 file_b 中:
所以,我想模拟bar
,以便我可以a
毫无问题地进行测试。
在 test_a 中:
每次都会失败,如下所示:
这意味着模拟不起作用。我似乎无法弄清楚我做错了什么。
python - 如何测试python中的方法中是否调用了另一个类方法?
我有以下结构:
我正在尝试编写一个单元测试方法 1 并想测试 foo 是否被调用一次。我怎样才能做到这一点?我应该嘲笑什么?
python - AttributeError: _mock_methods 扩展 MagicMock 类时
可以扩展一个 MagicMock 类来创建模拟对象并在单元测试中使用它吗?
如果我在 init 函数中没有任何代码,则扩展类似乎运行良好
但这会引发以下错误:
python - 模拟类的补丁属性
我正在尝试模拟一堂课。
我试图模拟的类如下所示(为简洁起见,已删除行):
如您所见,它有一个名为 的属性clients
。
我的测试方法:
我的单元测试如下所示:
问题是......我如何clients
在我的测试中设置属性,因为被测方法需要设置它?(我可以将它设置为None
,但我只需要能够设置它。)
使用当前代码,我的应用程序返回错误:
谢谢!
python-3.x - pytest 为所有测试存根方法
这是我正在测试的课程:
我的单元测试如下所示:
这一切正常。
但是,我不希望每次测试都monkeypatch
进行。有没有办法可以将相同的补丁应用于所有测试?
谢谢!
解决了
万一其他人发现了这个,我最终得到:
python - 如何在python中模拟电子邮件机密信息
我有一个返回字典的方法,该字典包含电子邮件特定的机密信息,如地址、收件人、令牌等。
为了发送电子邮件,我需要访问一个 REST URL 并将数据与机密信息一起发送。
我需要模拟负责发送邮件的方法
想知道如何为这门课写一个模拟
根据 mattyx17 解决方案,
我创造了这个,
但是 mock_settings.get_confidential_data.assert_call_once() 以及
self.assertTrue(mock_utility.called) 给出错误。