#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
является перечислением