我想验证Foo()个呼叫Bar(),但实际呼叫Bar().然后我想验证Bar()返回的任何内容都分配给obj.

我try 了以下操作:

class Bar:
    def __init__(self, a):
        print(a)

class Foo:
    def __init__(self):
        self.obj = Bar(1)

###

import pytest
from unittest.mock import Mock, patch
from mod import Foo, Bar

@pytest.fixture # With stdlib
def mock_bar():
    with patch('mod.Bar') as mock:
        yield mock

def test_foo(mock_bar):
    result = Foo()
    mock_bar.assert_called_once_with(1)
    assert result.obj == mock_bar

但它会失败并说:

E       AssertionError: assert <MagicMock na...='5265642864'> == <MagicMock na...='5265421696'>
E         Full diff:
E         - <MagicMock name='Bar' id='5265421696'>
E         ?                                 ^ ^^
E         + <MagicMock name='Bar()' id='5265642864'>
E         ?                     ++          +  ^ ^

推荐答案

这一行:

assert result.obj == mock_bar

应该是:

assert result.obj == mock_bar.return_value

调用Barresult被分配到self.obj = Bar(1)中,而不是Bar本身.

Python相关问答推荐

tempfile.mkstemp(text=.)参数实际上是什么?

为什么我的代码会进入无限循环?

每个组每第n行就有Pandas

使用Beautiful Soup获取第二个srcset属性

从今天起的future 12个月内使用Python迭代

使用from_pandas将GeDataFrame转换为polars失败,ArrowType错误:未传递numpy. dype对象

如何使用没有Selenium的Python在百思买着陆页面上处理国家/地区 Select ?

计算相同形状的两个张量的SSE损失

DataFrame groupby函数从列返回数组而不是值

为什么tkinter框架没有被隐藏?

rame中不兼容的d类型

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

如何在Windows上用Python提取名称中带有逗号的文件?

删除所有列值,但判断是否存在任何二元组

django禁止直接分配到多对多集合的前端.使用user.set()

Pre—Commit MyPy无法禁用非错误消息

实现神经网络代码时的TypeError

如何在达到end_time时自动将状态字段从1更改为0

手动设置seborn/matplotlib散点图连续变量图例中显示的值

在Python中使用yaml渲染(多行字符串)