2016-05-07 7 views
1

Ich schreibe gerade Komponententests für mein Python-Skript. Eine meiner Funktionen hat den folgenden Code:Wie monkeypatch die Registry-Verbindung mit pytest

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)] 

Ich benutze monkeypatch für die meisten meiner Tests. Ich habe mich gefragt, ob es eine Möglichkeit gibt, die ConnectRegistry-Funktion (oder sogar die OpenKey-Funktion) zu monkeyern, um die gewünschten Daten zurückzugeben. Ich würde es mit anderen Daten füttern und das Verhalten testen.

Antwort

0

Wird der Import tatsächlich in der Funktion getestet? Wenn nicht, würde so etwas funktionieren?

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 

Würden Sie müssen auch OpenKey und EnumKey monkeypatch?

+0

Nein, der Import ist nicht in dieser Funktion. Ich dachte, es gibt eine Möglichkeit, die OpenKey-Funktion zu verspotten, um eine Art Registrierungsschlüsselobjekt zurückzugeben, das die gewünschten Daten enthalten würde und die von der EnumKey-Funktion als gültiger Schlüssel interpretiert werden würde. Ist es möglich oder gibt es eine Beschränkung, die mich verpflichten würde, alle drei zu patchen? Denn wenn ich die drei Funktionen patch, gibt es nicht viel zu testen ... – Amaranth

+0

@Amaranth: Ich vermute, diese Funktionen greifen auf die Systemregistrierung auf einer Windows-Maschine? Ich weiß nicht wirklich viel darüber, wie das funktioniert. Wenn Sie kontrollieren können, was von my_CR und my_OK zurückkommt, so dass OpenKey und EnumKey etwas Sinnvolles tun, ohne zu patchen, würde ich denken, dass es Ihnen gut gehen würde. Ihre Tests funktionieren möglicherweise nur mit den richtigen Dateien in der Registrierung, d. H. Nur auf Ihrem Computer oder nur auf Computern, die genau so konfiguriert sind. –