2015-01-28 3 views
1

Как сделать mock.patch простой словарь {}?Как mock.patch простой словарь в python?

Я хотел бы проверить, установлены ли заголовки в {'Content-Type': 'application/json'}.

def get(self): 
    result = Spider.get_news_urls() 
    for k, v in result.iteritems(): 
     response = requests.get(v) 
     xml = response.text() 
     headers = {'Content-Type': 'application/json'} 
     data = '' 
     taskqueue.Task(url='/v1/worker', headers=headers, payload=json.dumps(data)).add(queue_name='itagnewstasks') 
    return 'success', 200 

Следующий испытательный блок, похоже, успешно исправил dict. Но у меня есть {}, который мне нужно заплатить.

@mock.patch('__builtin__.dict') 
@mock.patch('requests.get') 
def test_header_is_set_to_json(self, req_get, x): 
    gen = Generator() 
    gen.get() 
    x.assert_called_with() 

Я полагаю, альтернативный способ будет притворным патч taskqueue.Task() и сравнить, если она была вызвана с headers= {'Content-Type': 'application/json'} в качестве параметра.

ответ

3

Заголовки, которые вы пытаетесь высмеять, построены в рамках метода, который вы тестируете, поэтому насмешка над вызовом taskqueue.Task будет намного проще. Если вы передавали заголовок dict в методе, вы могли просто взять копию и проверить, что она обновлена, как вы ожидаете.

Вы можете использовать patch.dict издеваться словарь:

>>> foo = {} 
>>> with patch.dict(foo, {'newkey': 'newvalue'}): 
...  assert foo == {'newkey': 'newvalue'} 
... 
>>> assert foo == {} 
Смежные вопросы