2014-12-04 83 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