私はPython2.7でモックライブラリを見つけましたが、私の関数をunittestしたいと思います。私が読むチュートリアルは何でも、常にクラスについてです。私は働くことを嘲笑する機能を得ることができません。 プロジェクトは、データベースからデータを収集して解析する1つの関数で使用されるいくつかの支援機能があるように構成されています。私はデータベース機能とクエリ機能を模擬したい。単純なケースの場合、それは次のようになります。unittestモック関数出力
import unittest
import mock
def queryFnc(arg=0):
# imitate returned result from a query
if arg == 0:
return "queryFunc 0"
else: return "queryFunc 1"
def parsingFunc():
# function will parse result returned from a query
myString = queryFnc().upper()
return myString
class Test(unittest.TestCase):
def test_queryFunc0(self):
self.assertEquals("queryFunc 0", queryFnc(arg=0))
def test_queryFunc1(self):
self.assertEquals("queryFunc 1", queryFnc(arg=1))
@mock.patch('.queryFnc', return_value='queryMock')
def test_queryMock(self, queryFnc):
self.assertEquals('queryMock', queryFnc())
def test_parsingFunc(self):
self.assertEquals('QUERYFUNC 0', parsingFunc())
@mock.patch('.queryFnc', return_value='queryMock')
def test_parsingFuncMock(self):
self.assertEquals('QUERYMOCK', parsingFunc())
if __name__ == "__main__":
unittest.main()
私は@mock.patch
コールで機能を置き換えますが、私はそれが働いて得ることができることを期待しました。私はこのエラーがあります:
======================================================================
ERROR: test_queryMock (__main__.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File "\site-packages\mock\mock.py", line 1297, in patched
arg = patching.__enter__()
File "\site-packages\mock\mock.py", line 1353, in __enter__
self.target = self.getter()
File "\site-packages\mock\mock.py", line 1523, in <lambda>
getter = lambda: _importer(target)
File "\site-packages\mock\mock.py", line 1206, in _importer
thing = __import__(import_path)
ValueError: Empty module name
別の関数で異なる関数の結果を使用する方法はありますか? 私はPython2.7を使用するように拘束されています。