mock.assert_called_with возвращает противоречивые результаты

#python #python-3.x #python-unittest

#python #python-3.x #python-unittest

Вопрос:

У меня есть приведенный ниже код, работающий в 2 разных ветвях, который возвращает разные выходные данные.

 @patch("src.core.Preferences.get_preferences")
def test_get_preferences(self, mock):
    pref_service = Preferences()
    pref_service.get_preferences()
    mock.assert_called_with("foo", ScopeType.FOO, "bar")
 

Этот тест завершается ошибкой в одной ветке и передается в другой. Я отладил код и перешел к __eq__ методу, чтобы понять, чем они отличаются. Сбой при этой проверке в mock https://github.com/python/cpython/blob/4662fa9bfe4a849fe87bfb321d8ef0956c89a772/Lib/unittest/mock.py#L2489

При печати значений для этих проверок в порядке, указанном ниже, обнаружено, что они работают по-другому

 print((other_args, other_kwargs) == (self_args, self_kwargs))
print((other_args, other_kwargs))
print((self_args, self_kwargs))
 

Неудачный тест возвращает это значение

 False
(('foo', <ScopeType.FOO: 'foo'>, 'bar'), {})
(('foo', <ScopeType.FOO: 'foo'>, 'bar'), {})
 

Прохождение теста

 True
(('foo', <ScopeType.FOO: 'foo'>, 'bar'), {})
(('foo', <ScopeType.FOO: 'foo'>, 'bar'), {})
 

Может кто-нибудь помочь мне понять это поведение?

Комментарии:

1. Что делает функция `__eq__` для ScopeType. Как выглядит FOO?

2. ScopeType является перечислением