2016-05-07 5 views
1

私は現在、私のpythonスクリプトの単体テストを書いています。私の機能の1つは、次のコードを持っています:pytestとレジストリ接続をmonkeypatchする方法

from _winreg import * 

aReg = ConnectRegistry(None, HKEY_LOCAL_MACHINE) 
aKey = OpenKey(aReg, LIBRARIES_REG_KEY) 

count, value, type = QueryInfoKey(aKey) 

ver_list = [EnumKey(aKey, x) for x in range(count) if EnumKey(aKey, x).startswith(version)] 

私はほとんどのテストでmonkeypatchを使用しています。私はConnectRegistry(またはOpenKey)関数をmonkeypatchして、必要なデータを返す方法があるのだろうかと思っていました。私はそれを別のデータをフィードし、動作をテストします。

答えて

0

実際にテスト対象の関数にインポートされていますか?そうでない場合は、この作品のようなものでしょうか?

def my_CR(arg1, arg2): 
    return something_useful 

def my_OK(arg1, arg2): 
    return something_else_useful 

def test_myfunc(): 
    ConnectRegistry = my_CR 
    OpenKey = my_OK 
    assert function_calling_CR_and_OK(...) == expected_value 

OpenKeyとEnumKeyをmonkeypatchする必要がありますか?

+0

いいえ、インポートはその機能に含まれていません。私は、EnumKey関数で有効なキーとして解釈される、必要なデータを含むレジストリキーオブジェクトを返すためにOpenKey関数を擬似的に処理する方法があると考えました。それは可能でしょうか、それとも3つすべてにパッチを当てなければならないという制限がありますか?なぜなら、私が3つの機能にパッチを当てれば、テストする余裕はあまりないからです。 – Amaranth

+0

@Amaranth:これらの機能がWindowsマシン上のシステムレジストリにアクセスしていると思いますか?私はそれがどのように機能するかについてはあまり知らない。 OpenKeyとEnumKeyがパッチを適用しないで妥当なことをするように、my_CRとmy_OKから戻ってくるものを制御できれば、あなたは大丈夫だと思います。あなたのテストは、レジストリ内の適切なもの、つまり自分のマシン上でのみ、あるいはそのように構成されているマシン上でのみ動作します。 –

関連する問題