Assert_called_once_with ต้องตรวจสอบว่าที่โหดในการโทรออยู่กับเดียวกับข้อมูล

0

คำถาม

ฉันพยายามจะใช้ assert_called_once_with จาก unittest.ล้อเลียน https://docs.python.org/3/library/unittest.mock.html#unittest.mock.Mock.assert_called_once_with

แต่ฉันอยากจะตรวจสอบว่า 2 โหของวัตถุต้องผ่านกับเอ็ถูกต้องแอททริบิวต์ต่างๆ.

ดังนั้นอยู่ในห้องฉัน overrided ง __eq__ func:

    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])

ฉันต้องการจริงๆทางที่จะพิสูจน์ว่าเป็นตัวอย่างของสิ่งมีการผ่านที่เป็นพารามิเตอร์ของฟังก์ชันกับที่ถูกต้องคุณลักษณะเติมเต็ม.

mocking pytest python python-unittest
2021-11-23 20:31:11
1

คำตอบที่ดีที่สุด

0

คุณต้องการจะใช้ 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)

ที่นี่เป็นให้มันฟังดูรื่มรมย์กว่านี้ซับซ้อนตัวอย่างเช่นกัน args แล้ว kwargs assertions:

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)
2021-11-26 15:33:54

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................