Насмешливая функция Python в соответствии с различными входными аргументами unittest python - PullRequest
0 голосов
/ 28 октября 2019

У меня есть служебная функция, которая принимает аргумент case и возвращает значение соответственно

helper.py
def get_sport_associated_value(dictionary, category, case):
    if case == 'type':
        return "soccer"
    else: 
        return 1 #if case = 'id'

У меня есть основная функция, которая использует вышеуказанную функцию

crud_operations.py
def get_data(category):
    dictionary ={.....}
    id =  get_sport_associated_value(dictionary, category, 'id')
    .....
    .....
    type = get_sport_associated_value(dictionary, category, 'type')
    ....
    return "successful"

Теперь я тестирую модуль get_data () , используя unittest.Mock. У меня проблемы с передачей значений в id и вводом .

@mock.patch('helper.get_sport_associated_value')
def test_get_data(self, mock_sport):
    with app.app_context():
        mock_sport.side_effect = self.side_effect
        mock_sport.get_sport_associated_value("id")
        mock_sport.get_sport_associated_value("type")
        result = get_queries("Soccer")
        asserEquals(result, "successful")

 def side_effect(*args, **kwargs):
     if args[0] == "type":
         print("Soccer")
         return "Soccer"
     elif args[0] == "id":
         print("1")
         return 1

Я попытался this , используя side_effect function и столкнулся с проблемой, чтобы смоделировать get_sport_associated_value () в соответствии с различными значениями входного аргумента.

Вопрос 2: Какой метод лучше всего использовать mock или mock.magicmock по этому сценарию?

Любая помощь приветствуется в модульном тестировании. Спасибо

1 Ответ

0 голосов
/ 29 октября 2019

Вы неправильно тестируете args[0] как case. Аргументы функции обратного вызова side_effect должны совпадать с параметрами, которые вы хотите смоделировать:

def side_effect(dictionary, category, case):
    if case == "type":
        return "Soccer"
    elif case == "id":
        return 1
...