Макет патча для всей тестовой сессии ⇐ Python
-
Гость
Макет патча для всей тестовой сессии
tl;dr как сделать так, чтобы mock.patch для @classmethod длился весь сеанс тестирования а не только внутри области с или области действия функции?
Я хочу имитировать исправление метода класса. Однако я хотел бы запускать patch.object один раз, а не один раз в каждом тесте.
В настоящее время мне нужно дважды вызвать patch.object
класс MyClass(): @classmethod защита print_hello (cls): print("привет от настоящего MyClass.print_hello") защита do_something(self): проходить защита макета_print_hello (_cls): print("привет от пропатченного make_print_hello") класс TestMyClass(unittest.TestCase): защита test_init (сам): с помощьюock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) в качестве патча: МойКласс.print_hello() Мои занятия() защита test_do_something(self): с помощьюock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) в качестве патча: МойКласс.print_hello() МойКласс().do_something() Однако я хотел бы вызывать patch.object только один раз:
класс MyClass(): @classmethod защита print_hello(cls): print("привет от настоящего MyClass.print_hello") защита do_something(self): проходить защита макета_print_hello (_cls): print("привет от пропатченного make_print_hello") класс TestMyClass(unittest.TestCase): @classmethod защита setUpClass(cls): # этот патч не останется после возврата setUpClass patch =ock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) защита test_init (сам): # это вызывает настоящий MyClass.print_hello, а не макет_print_hello МойКласс.print_hello() Мои занятия() защита test_do_something(self): # это вызывает настоящий MyClass.print_hello, а не макет_print_hello МойКласс.print_hello() МойКласс().do_something() На практике исправление MyClass.new внутри setUpClass не выходит за рамки функции. Другими словами, test_init и test_do_something не вызывают mock_print_hello, они вызывают MyClass.print_hello. Как сделать так, чтобы макет патча не ограничивался одной функцией?
tl;dr как сделать так, чтобы mock.patch для @classmethod длился весь сеанс тестирования а не только внутри области с или области действия функции?
Я хочу имитировать исправление метода класса. Однако я хотел бы запускать patch.object один раз, а не один раз в каждом тесте.
В настоящее время мне нужно дважды вызвать patch.object
класс MyClass(): @classmethod защита print_hello (cls): print("привет от настоящего MyClass.print_hello") защита do_something(self): проходить защита макета_print_hello (_cls): print("привет от пропатченного make_print_hello") класс TestMyClass(unittest.TestCase): защита test_init (сам): с помощьюock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) в качестве патча: МойКласс.print_hello() Мои занятия() защита test_do_something(self): с помощьюock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) в качестве патча: МойКласс.print_hello() МойКласс().do_something() Однако я хотел бы вызывать patch.object только один раз:
класс MyClass(): @classmethod защита print_hello(cls): print("привет от настоящего MyClass.print_hello") защита do_something(self): проходить защита макета_print_hello (_cls): print("привет от пропатченного make_print_hello") класс TestMyClass(unittest.TestCase): @classmethod защита setUpClass(cls): # этот патч не останется после возврата setUpClass patch =ock.patch.object(MyClass, "print_hello", new_callable=mock_print_hello) защита test_init (сам): # это вызывает настоящий MyClass.print_hello, а не макет_print_hello МойКласс.print_hello() Мои занятия() защита test_do_something(self): # это вызывает настоящий MyClass.print_hello, а не макет_print_hello МойКласс.print_hello() МойКласс().do_something() На практике исправление MyClass.new внутри setUpClass не выходит за рамки функции. Другими словами, test_init и test_do_something не вызывают mock_print_hello, они вызывают MyClass.print_hello. Как сделать так, чтобы макет патча не ограничивался одной функцией?
Мобильная версия