2015-08-11 2 views
2

Предположим, мы имеем следующие функции Python:Mocking тип возврата для внешней функции в Python

def lookup_current_prices_dict(stocks): 
    prices = {} 

    for stock in stocks: 
     prices[stock] = stock_price_toolkit.get_current_price(stock) 

    return prices 

Я хочу написать модульный тест для этой функции, но я не хочу зависеть от цен выглядели используя модуль stock_price_toolkit. В сущности, я хочу сообщить stock_price_toolkit, чтобы всегда возвращать 1.00, когда get_current_price() вызывается так, что я могу просто проверить остальную часть функции.

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

ответ

0

Использование mock.patch и установите return_value из фиктивного объекта возвращается:

import stock_price_toolkit 

def lookup_current_prices_dict(stocks): 
    prices = {} 

    for stock in stocks: 
     prices[stock] = stock_price_toolkit.get_current_price(stock) 

    return prices 

##### 

import mock 
# from unittest import mock # If you're using Python 3.x 
with mock.patch('stock_price_toolkit.get_current_price') as m: 
    m.return_value = 1.0 
    assert lookup_current_prices_dict(['stock1', 'stock2']) == { 
     'stock1': 1.0, 'stock2': 1.0 
    } 

или, вы можете указать return_value в качестве ключевого слова аргумент mock.patch:

with mock.patch('stock_price_toolkit.get_current_price', return_value=1.0) as m: 
    assert lookup_current_prices_dict(['stock1', 'stock2']) == { 
     'stock1': 1.0, 'stock2': 1.0 
    } 
0

Вы можете сделать это с mock.patch , примерно следующее:

with patch('sock_price_toolkit.get_current_price') as m: 
    m.return_value = '1.00' 
    prices = lookup_current_prices_dict(stocks) 

Проверить Oficial documentation

0

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

try: 
    from unittest import mock # Python 3 
except ImportError: 
    import mock # Third-party module in Python 2 


with mock.patch('stock_price_toolkit.get_current_price') as mock_price: 
    mock_price.return_value = 1.0 
    expected = {'STOC': 1.0, 'STOK': 1.0} 
    assert lookup_current_prices(['STOC', 'STOK']) == expected 
Смежные вопросы