python имитировать функцию с другим аргументом и утверждать с возвращаемыми значениями - PullRequest
0 голосов
/ 09 мая 2020

Это может быть простой вопрос, но я новичок в имитационном тестировании и не могу понять, как это сделать.

У меня есть такой код

def check_item(item):
    <do some processing>
    return processed_item

В основном я пытаюсь имитировать эту функцию с несколькими элементами и соответствующими возвращаемыми значениями. например, если элемент - яблоко, возвращаемое значение - это процессор_яблоко, если это апельсин, возвращаемое значение - это апельсиновый цвет и т.д.

import my_module
from unittest.mock import patch

@patch("my_module.check_item")
def test_check_item(self, check_item):
    check_item.assert_called_once_with("apple")
    check_item.return_value = 'processed_apple'

Не уверен, правильно ли я поступаю (или правильно). И как я могу проверить несколько аргументов с разным набором возвращаемых значений для каждого аргумента?

1 Ответ

1 голос
/ 09 мая 2020

Чтобы проверить, был ли вызван метод или нет:

check_item.assert_called_once_with("apple")

Вы должны сначала вызвать функцию:

@patch("my_module.check_item")
def test_check_item(self, check_item):
   check_item("apple")
   check_item.assert_called_once_with("apple")
   check_item.return_value = 'processed_apple'

Но в коде я не вижу причин для тестирования это так, потому что он просто тестирует фиктивный модуль.

Если вы хотите протестировать возвращаемые значения функции, вы не должны имитировать функцию, а оставить как есть и просто протестировать для другого сценария ios . Например:

def test_check_item(self):
   result = check_item("apple")
   self.assertEqual(result, "some predefined result")

Цель модульного тестирования - проверить метод / класс на правильное поведение

...