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.
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
@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. –