からインポートする方法の中にインポートされた私は、テストに次の関数を得ましたデータベースの名前をとり、そこからコマンド文字列を作成し、このコマンドをsubprocess
としてexecute_cmd
メソッドで実行します。 実際にsubprocess
を実行せずにこの機能をテストしたいと思います。私は、コマンドが正しく構築され、正しくexecute_cmd
に渡されているかどうかを確認したいだけです。したがって、モジュールutils
からインポートされたexecute_cmd
メソッドをモックする必要があります。 機能をモックする方法、それは別のモジュール
my_project
|_src
| |_my_package
| | |_db_engine
| | | |_db_functions.py
| | | |_ __init__.py
| | |_utils.py
| | |_ __init__.py
| | |_ ....
| |_ __init__.py
|_tests
|_test_db_engine.py
は、だから私のテストのために、私は
test_db_engine.py
で、次の試してみました:
import unittest
from mock import patch
from my_pacakge.db_engine.db_functions import dbinfo
def execute_db_info_cmd_mock():
return {
'Last Checkpoint': '1.7',
'Last Checkpoint Date': 'May 20, 2015 10:07:41 AM'
}
class DBEngineTestSuite(unittest.TestCase):
""" Tests für DB Engine"""
@patch('my_package.utils.execute_cmd')
def test_dbinfo(self, test_patch):
test_patch.return_value = execute_db_info_cmd_mock()
db_info = dbinfo('MyDBNameHere')
self.assertEqual(sandbox_info['Last Checkpoint'], '1.7')
実際のコマンド利回りLast Checkpoint
ため1.6
の実行
マイフォルダ構造は次のようです。だから模擬戻り値が使用されているかどうかを確認するために、私は1.7
に設定します。 しかし、テストケースの実行は模擬でパッチされているはずの実際の関数を実行しているので、まだ1.6
という結果が得られているので、関数のモックは使用されません。
ここで何が間違っていますか?
ありがとうございます、これは正しく機能しました=) – Igle