问题标签 [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.

0 投票
1 回答
67 浏览

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 运行单元测试时被调用。我对如何解决这个问题一无所知。

0 投票
2 回答
75 浏览

python - 如何指导魔术模拟应如何处理其论点

我遇到了以下(边缘?)我不知道如何正确处理的情况。一般的问题是

  • 我有一个要测试的功能
  • 在那个函数中,我调用一个以生成器理解作为参数的外部函数
  • 在我的测试中,我模拟了外部函数
  • 现在产品代码和测试代码不同:在产品中,生成器被消耗,模拟不这样做

这是我的代码库中的简化示例:

测试运行得很好,对我所关心的一切都足够好。但是当我coverage在代码上运行时,我在摘要中描述的情况变得明显:

->exitcoverage.py 中的语法解释。 鉴于理解可以执行我确实想要运行的相关业务逻辑,因此错过的覆盖范围是相关的。它只是random.randint在这里调用,但它可以做任何事情。


解决方法:

  1. 我可以只使用列表推导。代码被调用,每个人都很高兴。除了我,他必须修改他们的后端才能缓和测试。
  2. 我可以在测试期间进入模拟,抓住调用 arg,然后手动展开它。这可能看起来很糟糕。
  3. 我可以对函数进行monkeypatch,而不是使用magicmock,类似这样的monkeypatch.setattr('itertools.accumulate', lambda x: [*x])描述性很强。但是我将失去像我的示例中那样进行调用断言的能力。

我认为一个好的解决方案是这样的,遗憾的是它不存在:

0 投票
2 回答
1237 浏览

python - Python unittest:无法模拟导入的函数,因此条件评估为 False

我在 Python 中遇到单元测试问题。具体来说,当我尝试模拟我的代码导入的函数时,分配给该函数输出的变量被分配给一个 MagicMock 对象,而不是模拟函数的 return_value。我一直在研究 python 的 unittest 库的文档,但没有任何运气。

以下是我要测试的代码:

这是我尝试过的:

我遇到的问题是,当测试进入variable = functionBMyClass 时,变量没有设置为我的返回值;它被设置为一个 MagicMock 对象(因此 if 语句总是计算为 True)。如何模拟导入的函数,以便在执行时变量实际上设置为返回值而不是 MagicMock 对象本身?

0 投票
1 回答
563 浏览

python - 迭代 Mock 返回值

我正在尝试模拟返回列表的方法。设置后return_value,它仍然返回一个 Mock 对象而不是列表,所以我不能迭代那个对象。

我要测试的功能示例:

测试示例:

总之,db_engine.execute(query).fetchall()必须返回列表,所以我可以迭代query_result,但它不会发生。尽管在attributequery_result中有正确的值return_value,但我无法对其进行迭代。

0 投票
2 回答
300 浏览

python - 似乎无法在另一个文件中修补类和方法

我一直在用这样的小模型把头撞在墙上:

这是树:

在 file_a 中:

在 file_b 中:

所以,我想模拟bar,以便我可以a毫无问题地进行测试。

在 test_a 中:

每次都会失败,如下所示:

这意味着模拟不起作用。我似乎无法弄清楚我做错了什么。

0 投票
2 回答
1256 浏览

python - 如何测试python中的方法中是否调用了另一个类方法?

我有以下结构:

我正在尝试编写一个单元测试方法 1 并想测试 foo 是否被调用一次。我怎样才能做到这一点?我应该嘲笑什么?

0 投票
1 回答
592 浏览

python - AttributeError: _mock_methods 扩展 MagicMock 类时

可以扩展一个 MagicMock 类来创建模拟对象并在单元测试中使用它吗?

如果我在 init 函数中没有任何代码,则扩展类似乎运行良好

但这会引发以下错误:

0 投票
1 回答
107 浏览

python - 模拟类的补丁属性

我正在尝试模拟一堂课。

我试图模拟的类如下所示(为简洁起见,已删除行):

如您所见,它有一个名为 的属性clients

我的测试方法:

我的单元测试如下所示:

问题是......我如何clients在我的测试中设置属性,因为被测方法需要设置它?(我可以将它设置为None,但我只需要能够设置它。)

使用当前代码,我的应用程序返回错误:

谢谢!

0 投票
0 回答
1125 浏览

python-3.x - pytest 为所有测试存根方法

这是我正在测试的课程:

我的单元测试如下所示:

这一切正常。

但是,我不希望每次测试都monkeypatch进行。有没有办法可以将相同的补丁应用于所有测试?

谢谢!

解决了

万一其他人发现了这个,我最终得到:

0 投票
1 回答
65 浏览

python - 如何在python中模拟电子邮件机密信息

我有一个返回字典的方法,该字典包含电子邮件特定的机密信息,如地址、收件人、令牌等。

为了发送电子邮件,我需要访问一个 REST URL 并将数据与机密信息一起发送。

我需要模拟负责发送邮件的方法

想知道如何为这门课写一个模拟

根据 mattyx17 解决方案,

我创造了这个,

但是 mock_settings.get_confidential_data.assert_call_once() 以及

self.assertTrue(mock_utility.called) 给出错误。