我想了解如何从导入的模块导入功能@patch
。Python嘲笑导入模块的功能
这是我到目前为止的地方。
应用程序/ mocking.py:
from app.my_module import get_user_name
def test_method():
return get_user_name()
if __name__ == "__main__":
print "Starting Program..."
test_method()
应用程序/ my_module/__ init__.py:
def get_user_name():
return "Unmocked User"
测试/ mock-test.py:
import unittest
from app.mocking import test_method
def mock_get_user():
return "Mocked This Silly"
@patch('app.my_module.get_user_name')
class MockingTestTestCase(unittest.TestCase):
def test_mock_stubs(self, mock_method):
mock_method.return_value = 'Mocked This Silly')
ret = test_method()
self.assertEqual(ret, 'Mocked This Silly')
if __name__ == '__main__':
unittest.main()
这是不是工作正如我所料。 “修补”模块只是返回get_user_name
的解锁值。如何从我导入到测试中的命名空间的其他软件包中模拟方法?
问题是关于“嘲笑最佳实践”或者您所做的事情是否合理?关于第一个我会说使用一个模拟库,例如['Mock'](http://www.voidspace.org.uk/python/mock/),它包含在python3.3 +中['unittest .mock'](http://docs.python.org/dev/library/unittest.mock)。 – Bakuriu 2013-04-21 17:55:15
我在问我是否正在讨论这项权利。我看了莫克,但我没有看到解决这个问题的方法。有什么方法可以重新创建我在Mock上面做的事情? – nsfyn55 2013-04-21 18:00:09