2015-04-13 1 views
1

Я думаю, что неправильно понимаю, как использовать mocks для изменения возвращаемого значения функции. Вот мой тест:unittest Mock - значение возврата патча

from path.to import programme_finder 
@patch('path.to.programme_finder._calc_update_interval') 
def test_refresh_interval(self,method_mock): 
    today = datetime.datetime.now() 
    dd = datetime.timedelta(millisecond=20) 
    earlier_date = today - dd 
    #The normal function returns a 5 day interval. 
    # For tests I want it down to 20ms 
    method_mock.return_value = earlier_date 
    #Here I would expect a date object, instead I get MagicMock 
    print("Calc returns %s " % programme_finder._calc_update_interval) 
    # rest of the test irrelevant 
    self.fail("need to time responce time") 

Что я делаю неправильно? Как я могу получить programme_finder._calc_update_interval для возврата моего исправленного datetime?

Пробовал

assert programme_finder._calc_update_interval == earlier_date 

, а также и он терпит неудачу.

#programme_finder.py 
def _calc_update_interval(): 
    today = datetime.datetime.now() 
    # The days we want to subtract for today. 
    update_interval = current_app.config.get("RESOURCE_UPDATE_INTERVAL") 
    dd = datetime.timedelta(days=update_interval) 
    # Find which date it was x days ago 
    earlier_date = today - dd 
    return earlier_date 

ответ

3

Он смотрит на меня, как вы не вызывая функцию - вы ссылающийся его по имени, так что вы получите верните издеваемую функцию вместо вашего макетного возвращаемого значения.

print("Calc returns %s " % programme_finder._calc_update_interval) 
                   ^reference 

Должно быть

print("Calc returns %s " % programme_finder._calc_update_interval()) 
                   ^^call 
-1

Проблема, кажется, что _calc_update_interval это свойство (я предполагаю, созданный с @property декоратора), а не метод. Самый простой подход, чтобы просто использовать PropertyMock класс, снабженный издеваться (документированной here):

@patch('path.to.programme_finder._calc_update_interval', new_callable=PropertyMock): 
def test_refresh_interval(self,method_mock): 
    #... 
+0

Нет _calc_update_interval функция. Я добавлю его к вопросу. – Giannis

 Смежные вопросы

  • Нет связанных вопросов^_^