2014-12-08 2 views
0

У меня есть модуль под названием com, выполняющий низкоуровневую последовательную связь. Этот модуль используется модулями более высокого уровня для связи. Я пытаюсь добавить соответствующие модульные тесты к этим модулям, но я не хочу, чтобы тесты зависели от последовательной связи. Поэтому мне нужно высмеять модуль «com», чтобы подражать ответам от последовательной связи.Мощный импортированный модуль в Python

вручную Я хотел бы сделать это с простым изменением импорта строки:

import mymodule.com 

к чему-то вроде:

import mymodule.mocked_com as com 

Но я знаю, что это не очень хороший подход ... так пытается использовать mock.patch украшение, без успеха:

@mock.patch('mymodule.com', returns=(True, 'Test')) 
def test_myfunction(capsys): 
    result, message = controller.myfunction('Something', 'command') 
    assert(result) 
    assert(message == 'Test') 
    out, err = capsys.readouterr() 

По какой-то причине у меня никогда не было желаемого результата r eturned from "com", но получите сообщение об ошибке: "ValueError: требуется больше 0 значений для распаковки".

ответ

1

Декоратор mock.patch высмеивает относительный путь, который вы предоставляете. Это означает, что в модуле X, что вы проверяете, если вы импортировать и использовать com таким образом:

import com 
com.my_awesome_call() 

В тесте X модуля вы должны залатать ком таким образом (с учетом Х у источника):

@mock.patch('X.com', ...) 
def test_myfunct(mock_com): 
    # Boom Badaboom test things 
+0

Это то, что я пропустил! Я добавил относительный путь для конкретного метода модуля «com» ​​и ссылался на метод издевательств из модуля макета. Теперь работа хорошая. – balas

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