我正在困擾Python的模擬測試方法。Python單元測試模擬...模擬一個模塊語句
我想對this file做一些嘲弄。
由於包XBMC,xbmcaddon和xbmcgui不能在正常的Python環境中導入我已經成功地嘲笑它們像這樣:
class XBMCTestCase(unittest.TestCase):
def setUp(self):
#Mock up any calls to modules that cannot be imported
self.xbmc = Mock()
self.xbmcgui = Mock()
self.xbmcaddon = Mock()
modules = {
'xbmc' : self.xbmc,
'xbmcgui': self.xbmcgui,
'xbmcaddon': self.xbmcaddon
}
self.module_patcher = patch.dict('sys.modules', modules) #@UndefinedVariable
self.module_patcher.start()
看到它在行動here。
所以,當我輸入setlocation.py我得到一個錯誤這樣的:
File "/home/paulo/workspace/weather.metoffice/src/metoffice/utils/utilities.py", line 21, in <module>
CACHE_FOLDER = os.path.join(ADDON_DATA_PATH, 'cache')
File "/usr/lib/python2.7/posixpath.py", line 78, in join
path += b
TypeError: unsupported operand type(s) for +=: 'Mock' and 'str'
即使我嘲笑了「metoffice.utils」(將其添加到模塊中的補丁安裝時創建的列表)我在setlocation.py
File "/home/paulo/workspace/weather.metoffice/src/metoffice/setlocation.py", line 32, in <module>
GEOIP_PROVIDER = int(__addon__.getSetting('GeoIPProvider'))
TypeError: int() argument must be a string or a number, not 'Mock'
所以我需要__addon__.getSetting()
返回一個字符串得到一個類似的錯誤。
任何想法?
所有的嘗試都失敗了,但我不認爲我完全理解了模擬包的功能。
注意我關於Python 2.7.3與mock 1.0.1
'__addon__'從哪裏來?如果你嘲笑了那個對象,你需要確保你爲getSetting()調用設置了一個返回值。 –