Я использую unittest и mock для тестирования скрипта, который выглядит так
class Hi:
def call_other(self):
perform some operation
sys.exit(1)
def f(self):
try:
res = self.do_something()
a = self.something_else(res)
except Exception as e:
print(e)
call_other()
print("hi after doing something") -----> (this_print)
def process(self)
self.f()
, а мой тестовый скрипт выглядит так
class Test_hi(unittest.TestCase)
def mock_call_other(self):
print("called during error")
def test_fail_scenario():
import Hi class here
h = Hi()
h.process()
h.do_something = mock.Mock(retrun_value="resource")
h.something_else = mock.Mock(side_effect=Exception('failing on purpose for testing'))
h.call_other(side_effect=self.mock_call_other) -----> (this_line)
Если я не издеваюсь call_other
он вызовет sys.exit (1), что вызовет некоторые проблемы при запуске unittest, поэтому я не хочу вызывать sys.exit (1) в call_other
во время тестирования. Однако, если я имитирую метод call_other
, как указано выше (в this_line
), он просто что-то напечатает и продолжит выполнение метода f
. Это означает, что он выполнит оператор печати (в this_print
). Этого не должно быть в реальной программе, когда исключение будет обнаружено, он выполнит sys.exit (1) и остановит программу. Как я могу добиться того же, используя unittest и mock, когда исключение обнаружено? Я хочу остановить выполнение этого теста и перейти к следующему тесту.
Как этого добиться? Пожалуйста, помогите