2

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.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を使用していることに注意してください

4

1 に答える 1