簡體   English   中英

Python unittest模擬…模擬模塊語句

[英]Python unittest mock … mock a module statement

我很難理解python的模擬測試方法。

我想對此文件進行一些模擬。

由於軟件包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()

看到它在這里行動。

因此,當我導入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.pysetlocation.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()返回一個字符串。

有任何想法嗎?

所有嘗試都失敗了,但是我認為我無法完全掌握模擬包的功能。

注意我在使用模擬1.0.1的 Python 2.7.3

您需要告訴您的模擬返回什么。 __addon__值是xbmcaddon.Addon()調用的結果,因此您可以通過以下方式訪問該模擬對象:

addon = self.xbmcaddon.Addon.return_value

因為.return_value為您提供了調用Addon()將返回的實際Mock對象。

現在您可以告訴該Mock對象,當調用getSetting()方法時返回什么; 這里提供兩個值,因此您可以使用side_effect設置要返回的值序列:

addon.getSetting.side_effect = ['some_api_key', '42']

第一次調用__addon__.getSetting()將產生第一個值'some_api_key' ,第二個cal將產生'42'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM