2014-12-04 3 views
1

У меня есть два питона файла:Mock функция из другого модуля

function.py:

def foo(): 
    return 20 

def func(): 
    temp = foo() 
    return temp 

и mocking.py:

from testing.function import * 
import unittest 
import mock 
class Testing(unittest.TestCase): 

def test_myTest(self): 

    with mock.patch('function.func') as FuncMock: 
     FuncMock.return_value = 'string' 

     self.assertEqual('string', func()) 

Я не хочу издеваться FUNC, но нет положительный результат. У меня есть AssertionError: 'string'! = 20. Что мне делать, чтобы издеваться над этим? Если я делаю mock.patch («func»), у меня есть TypeError: нужна правильная цель для исправления. Вы предоставили: «func». Если переместить func в mocking.py и вызвать foo: function.foo(), он работает правильно. Но как это сделать, когда я не хочу перемещать функции из функции.py в mocking.py?

ответ

1

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

Однако это не сработает, потому что вы издеваетесь над function.func, но вы уже импортировали func в свой тестовый файл. Таким образом, func(), который вы вызываете, является фактической функцией, это не то же самое, что и насмешка FuncMock. Попробуйте позвонить FuncMock(), и вы получите результат, как ожидалось.

Следующие должны работать, и это дает вам представление о том, что можно сделать:

from testing.function import func 
import unittest 
import mock 

class Testing(unittest.TestCase): 

    def test_myTest(self): 

     with mock.patch('testing.function.foo') as FooMock: 
      FooMock.return_value = 'string' 

      self.assertEqual('string', func()) 
+0

большое спасибо :-) –

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