2016-07-12 2 views
0

У меня есть ресурс API REST API, например, Resource, который импортирует и использует функцию get_token от libs.utils в своем методе obj_get.Исправлена ​​неправильная замена исправления

Так, чтобы проверить этот ресурс, в моем тестовом классе я создал тест, как то, что следует:

mock_get_token = Mock(return_value="something") 

@patch("path.to.resource.get_token", mock_get_token) 
def test_get_token(self): 
    params = {"args": "args"} 
    # following call should call the get_token function in the resource 
    response = self.client.get("path/to/resource", params) 
    # do things with the response and make sure I get right output 

Так что, когда я запускаю тест сам по себе, то @patch работает правильно, и, как и ожидалось, замена с функцией макета. Тем не менее, запуск теста в нашем расширенном наборе тестов для приложения приводит к сбою патча.

Выполнение таких действий, как ручная попытка заменить функцию с посмеянной функцией, также имеет неудачный патч. Мне интересно, что еще может вызвать проблему, и мне очень любопытно, что патч работает правильно, когда тест выполняется сам по себе или с меньшим подмножеством нашего набора тестов.

ответ

0

Мы не смогли найти точное решение, но обходным путем было то, что, поскольку большая часть логики в методе obj_get обрабатывалась другой функцией api_call(), мы издевались над вызовом функции api_call.

Таким образом, проблема оказалась проблемой импорта, поскольку api_call не был импортирован нигде.

0

Взгляните на известный gotchas. Возможно, вы пытаетесь исправить неправильное место ...