问题标签 [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 回答
6934 浏览

python - 单元测试中的Python模拟数据库连接/未知类型

新手到 python 这里。我的类使用数据库连接来包装一些函数。我已经成功地想出了一些基本的例子。对于我正在使用的更复杂的库,我找不到模拟数据库连接的密切示例。在我的,

其中 db_con 是一个 teradata。UdaExec 返回一个连接

因此,为了让我的测试不使用任何真正的连接,我必须模拟一些事情。我试过这个组合:

但我的结果搞砸了,因为 fetchone 返回的是一个模拟,而不是我期待的 [500] 一个项目列表:

我发现了一些示例,其中有一个用于测试操作系统操作的“with 块”,但没有与数据库有关。另外,我不知道 db_con.cursor 是什么数据类型,所以我无法准确指定 - 我认为光标位于Teradata/PyTd的 UdaExecConnection.cursor() 中。

我需要知道如何模拟允许我测试我的方法中的逻辑的响应。

0 投票
0 回答
155 浏览

python - 无法使用 unittest.patch 模拟导入语句

我在函数中有一个导入语句,我想使用补丁模拟该导入语句,但不能。

得到

0 投票
1 回答
27610 浏览

python - 魔术模拟 assert_called_once 与 assert_called_once_with 奇怪的行为

我注意到 python 的一个奇怪的assert_called_once行为assert_called_once_with。这是我真正简单的测试:

文件模块/a.py

文件模块/b.py

这些是我的测试:

如函数名称所述,我的问题是:

  • 测试 1 正确通过
  • 测试 2 正确通过
  • 测试 3 正确失败(我已删除对 b 的调用)
  • 测试 4 通过我不知道为什么。

难道我做错了什么?我不确定,但阅读文档文档 python

assert_call_once(*args, **kwargs)

断言模拟只被调用了一次。

0 投票
1 回答
677 浏览

python - Python 的魔术模拟没有按预期工作。实际函数被调用

我有一个模型:

说,我有另一个使用它的功能:

现在,当我为filter_graded方法编写测试时,我模拟is_completely_graded某些实例返回真/假。测试不尊重模拟,而是调用实际is_completely_graded。我该如何解决这个问题?

我的测试看起来像:

0 投票
2 回答
324 浏览

python - 当鼻子测试发现测试时,Magic Mock 失败

我正在使用 MagicMock 测试 Web 应用程序中的功能。该函数是直接从模块导入的。

预期的行为是:当调用被测试的函数时,它会调用第三方 api(但我在为我的测试模拟这个)。这将返回一个字典,并且被测函数将其插入到一个对象中并返回该对象。

当我使用nosetests 运行特定的测试模块时,效果很好。

当我使用鼻子测试在我的test/unit/文件夹中发现和运行测试时,测试没有按预期工作。取而代之的是,模拟 API 返回 aNoneType并且被测试的函数返回一个 Magic Mock 实例。

考试:

正在测试的功能(在user_service模块中):

你能帮我理解为什么结果不一致吗?

编辑

新信息 - 如果我直接在模块上使用鼻子测试,我正在测试的函数会以 unicode 的形式访问模拟的 Facepy 字典值(如预期的那样)。如果我使用nosetests 来发现测试,或者如果我使用下面dm03514 发布的解决方案并直接运行测试,则该函数会从模拟的facepy API 作为Magic Mock 实例访问字典。意思是,访问 dict 的每个结果都是一个 Magic Mock 实例。

这很令人困惑,因为我将 return_value(在所有测试中)设置为字典。

0 投票
1 回答
2375 浏览

python - MagicMock 和 wrap

为什么 MagicMock 对象的“wraps”关键字不能始终如一地工作?普通方法被传递给被包装的对象,但不是“特殊”方法。在下面的测试中,第一个断言通过,第二个失败。

我在文档中找不到任何暗示这一点的东西。我错过了什么吗?

0 投票
1 回答
2735 浏览

python - 如何模拟属性以引发异常?

我正在使用带有 Python 2.7 的 MagicMock 来模拟对象。我正在模拟的其中一个类具有属性,其中一个TypeError在某些情况下可以引发 a。

我想嘲笑这种行为,但我不知道如何:

  • del my_mock.my_property将导致AttributeErrorifmy_property被访问,但我需要一个TypeError.
  • my_mock.my_property = MagicMock(side_effect=TypeError)导致TypeErrorwhen my_propertyis called,但不是仅在访问时。

我该怎么做?

0 投票
1 回答
267 浏览

python - 无论在哪里使用,如何在 python 中使用补丁来模拟 python 库?

在以下问题中,使用 ftplib 的函数在同一个文件中定义,这使得修补 ('ftplib.FTP') 变得很简单

模拟 ftplib.FTP 以对 Python 代码进行单元测试

我的问题是:如果在我的测试中,我想创建一个在某处使用 ftplib 的类的实例(我们称之为“A”)(即:A 类有 B 类的实例),我应该如何进行B 有一个调用 connect()) 的 FTP 对象?

如果我使用另一个问题中给出的解决方案,我发现调用的是 ftplib 而不是 mock。我怎么知道 ftplib.FTP 的正确路径?

0 投票
1 回答
1371 浏览

python - 如何修补从python中的实例调用的方法

我正在尝试为我的文件abc.py编写一个单元测试。我无法为从类实例调用的方法设置返回值。

这是我的文件:

abc.py

这是测试文件

测试.py

收到以下错误:

0 投票
1 回答
1578 浏览

python - Python magicmock 导致“NoneType”对象没有属性“注销”

我正在尝试使用我编写的自定义模拟来修补函数调用

内部方法有这段代码

但是,当我运行它时,它会返回一个属性错误

“NoneType”对象没有属性“注销”

我猜return_value设置为 NoneType 但我认为这subscriberMock.return_value.unregister.return_value会覆盖它


更多信息:

如果我打印self.subscribers[topic]它返回None。然后它运行副作用。为什么应该self.subscribers[topic] = None假设我有一个参数的返回值。