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__ समारोह:

    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 दावे:

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ý
..................................................................................................................