У меня есть класс Python TestCase
, где все тестовые методы, кроме одного, должны исправлять объект одинаково. Другой метод требует другого поведения от одного и того же объекта. Я использую mock, поэтому я сделал:
@mock.patch('method_to_patch', mock.Mock(return_value=1))
class Tests(TestCase):
@mock.patch('method_to_patch', mock.Mock(return_value=2))
def test_override(self):
(....)
Но это не работает. Когда test_override
запущен, он по-прежнему вызывает исправленное поведение от декоратора класса.
После многого отладки я узнал, что во время сборки TestSuite
, @patch
вокруг test_override
вызывается перед тем, что находится вокруг Tests
, а так как mock
применяет патчи по порядку, декоратор класса переопределяет декоратор метода.
Правильно ли этот порядок? Я ожидал обратное, и я не уверен, как переопределить исправление... Может быть, с выражением with
?