gpt4 book ai didi

python - Assert_called_once_with 需要检查调用中的实例是否具有相同的信息

转载 作者:行者123 更新时间:2023-12-05 04:41:27 25 4
gpt4 key购买 nike

我正在尝试使用来自 unittest.mock https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called_once_with 的 assert_called_once_with

但我想检查是否传递了具有正确属性的 2 个对象实例。

所以在类中我重写了 __eq__ 函数:

    def __eq__(self, other):
return (
self.id == other.id
and self.users == other.users
)

在我这样使用的代码中

        mock_add_user.assert_called_once_with(context_fix, expected_user_obj1, expected_user_obj2, users)

但是我一直报错,teste 一直在比较实例的 repr,就像这样

<app.domain.model.load_md.Load object at 0x10cb7d7d0>
E           AssertionError: Expected call: add_user(<app.infrastructure.context.Context object at 0x10cb7da50>, <app.domain.model.load_md.Load object at 0x10cb7d7d0>, <app.domain.model.load_md.Load object at 0x10cb7d550>, [1, 2, 3, 2])
E Actual call: add_user(<app.infrastructure.context.Context object at 0x10cb7da50>, <app.domain.model.load_md.Load object at 0x10ca7f5d0>, <app.domain.model.load_md.Load object at 0x10cd1e650>, [1, 2, 3, 2])

我真的需要一种方法来断言对象的实例是否已作为函数的参数传递并填充了正确的属性。

最佳答案

您想使用 call_args模拟对象的属性:

from unittest.mock import ANY, Mock

class Foo:
pass

def call(add_user):
f = Foo()
add_user(f)

def test_is_instance():
mock_add_user = Mock()

call(mock_add_user)

# expected = Foo()
# mock_add_user.assert_called_once_with(expected) # This would fail
mock_add_user.assert_called_once_with(ANY)
assert isinstance(mock_add_user.call_args.args[0], Foo)

这是一个稍微复杂一些的示例,其中包含 argskwargs 断言:

from unittest.mock import ANY, Mock

class Foo:
pass

class Bar:
pass

def call(add_user):
f = Foo()
b = Bar()
add_user(f, bar=b)

def test_is_instance():
mock_add_user = Mock()

call(mock_add_user)

mock_add_user.assert_called_once_with(ANY, bar=ANY)
assert isinstance(mock_add_user.call_args.args[0], Foo)
assert isinstance(mock_add_user.call_args.kwargs["bar"], Bar)

关于python - Assert_called_once_with 需要检查调用中的实例是否具有相同的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70087415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com