2014-12-04 135 views
1

我有兩個Python文件:模擬功能

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(),它可以正常工作。但是,如果我不想將函數從function.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

非常感謝你:-) – 2014-12-04 20:27:43