当前位置: 首页 > 面试题库 >

补丁不模拟模块

鲜于勇
2023-03-14
问题内容

我想嘲笑subprocess.Popen。但是,当我运行以下代码时,该模拟被完全忽略了,我不确定为什么

测试代码:

def test_bring_connection_up(self):
    # All settings should either overload the update or the run method
    mock_popen = MagicMock()
    mock_popen.return_value = {'communicate': (lambda: 'hello','world')}
    with patch('subprocess.Popen', mock_popen):
        self.assertEqual(network_manager.bring_connection_up("test"), "Error: Unknown connection: test.\n")

模块代码:

from subprocess import Popen, PIPE
# ........
def list_connections():
    process = Popen(["nmcli", "-t", "-fields", "NAME,TYPE", "con", "list"], stdout=PIPE, stderr=PIPE)
    stdout, stderr = process.communicate() # <--- Here's the failure
    return stdout

问题答案:

您没有在正确的位置打补丁。您在Popen定义的地方打补丁:

with patch('subprocess.Popen', mock_popen):

您需要修补Popen导入的位置,即在编写此行的“模块代码”中:

from subprocess import Popen, PIPE

即,它应该看起来像:

with patch('myapp.mymodule.Popen', mock_popen):

要获得快速指南,请阅读文档中的部分:修补位置。



 类似资料:
  • 问题内容: 我正在尝试使用富有想象力的Mock测试库测试Django应用程序时模拟某些东西。我似乎无法完全正常工作,我正在尝试这样做: 我究竟做错了什么? 问题答案: 啊,我对在哪里应用该补丁装饰感到困惑。固定:

  • 问题内容: 我有两个档案 秒杀 test_spike.py: 当我运行时,第一个测试用例将通过,但是第二个将失败。而我切换到use ,则两个都失败了。 我不明白这是怎么发生的?这些情况本应全部通过。 问题答案: 对于 test_foo, 您没有正确使用补丁。您应该像这样使用它: 这给了我: 现在,第二个示例不起作用,因为您导入了bar函数(获取对其的引用),然后尝试对其进行模拟。模拟某些内容时,您

  • 问题内容: 使用模拟进行单元测试conn(): app.py test.py 错误:未调用 断言 。 我认为这是因为’Database_url’不在我打补丁的os.environ中,并且因为没有对mysql_mock.connect进行该测试调用。 问题: 1为了使此测试代码有效,我需要进行哪些更改? 2.我还必须修补’urlparse’吗? 问题答案: 您可以尝试此解决方案。只需调用一个参数即可

  • 问题内容: 我对AngularJs完全陌生。我正在尝试使用Angularjs向Django Deliciouspie API发送PATCH请求。我的代码是 但是,当我尝试使用此代码发送请求时,出现了一个错误消息,即http.patch不是函数。告诉我如何配置ng- app和服务以使用AngularJs发送PATCH请求。我读过PATCH请求在$ resource中可用,所以我也对$ resourc

  • Git 中的一些命令是以引入的变更即提交这样的概念为中心的,这样一系列的提交,就是一系列的补丁。 这些命令以这样的方式来管理你的分支。 git cherry-pick git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前分支上。 从一个分支单独一个或者两个提交而不是合并整个分支的所有变更是非常有用的。 在 变基与拣选工作流 一节中描述和演示了

  • 我和邮递员一起工作,我发现它有很多模式。我能够实现一个resrequest对象,它“知道”如何在Post或Get方法中发送请求。 这是我代码的一部分: 如何让我的webTarget在补丁模式下发送请求?