Пропустить первый вызов для смоделированного объекта в Python - PullRequest
0 голосов
/ 11 марта 2020

Это мой код функции и ее модульные тесты, которые тестируют одну и ту же функцию в двух отдельных попытках, за исключением блоков с разными входами:

Скрипт:

from file import myfunction

in main:
try:
    myfunction(str_input_1)
except Exceptoin as e:
    print("error str_input_1")

try:
    myfunction(str_input_2)
except Exceptoin as e:
    print("error str_input_2")

Модульные тесты в отдельный файл:

    @patch(myfunction)
    def call_myfunction_with_str_input_1(self, mock_myfunction):
        mock_myfunction.side_effect = Exception("error str_input_1")

        myfunction(str_input_1)

        mock_myfunction.assert_called_with(str_input_1)

    @patch(myfunction)
    def call_myfunction_with_str_input_2(self, mock_myfunction):

        myfunction(str_input_2)

        mock_myfunction.assert_called_with(str_input_2)

Первый тестовый пример проходит нормально, но второй модульный тест также пытается запустить его со значением для первого модульного теста:

raise AssertionError(_error_message()) from cause
AssertionError: Expected call: myfunction(str_input_2)
Actual call: myfunction(str_input_1)

1 Ответ

0 голосов
/ 12 марта 2020

Изменение

@patch(myfunction)
def call_myfunction_with_str_input_2(self, mock_myfunction):

   myfunction(str_input_2)

   mock_myfunction.assert_called_with(str_input_2)

На:

@patch(myfunction)
def call_myfunction_with_str_input_2(self, mock_myfunction):
    mock_myfunction.side_effect = [
        None, # call for str_input_1
        Exception(exception_error), # call for str_input_2
    ]

   myfunction(str_input_2)

   mock_myfunction.assert_called_with(str_input_2)

Решена проблема.

...