ich Schreibe eine Menge von unit-tests. Leider erfordert mein Code oft das Patchen von Affen, um ordnungsgemäß auf der Einheit getestet zu werden. Ich verwende häufig die patch
– Funktion aus Michael Foords Mock-Bibliothek (jetzt in Python 3.4 als unittest verfügbar).mock) zu Affen Patch meinen Code.
Beim Chatten mit anderen Benutzern von patch
wurde mir klar, dass jeder seine eigene bevorzugte Art zu verwenden scheint. In diesem Beitrag werde ich diskutieren, wie ich Patch verwenden.,
Dekorateur
Patch kann als Methodendekorateur verwendet werden:
oder als Klassendekorateur:
Ich verwende Patch als Dekorateur, wenn ich eine Funktion habe, die ich während meines gesamten Tests patchen möchte. Ich neige dazu, Patch nicht als Klassendekorateur zu verwenden, und ich werde unten erklären, warum.
Dekorationsbeispiel
Kontextmanager
Patch kann als Kontextmanager verwendet werden:
Ich bevorzuge Patch als Kontextmanager, wenn ich eine Funktion nur für einen Teil eines Tests patchen möchte. Ich verwende patch nicht als Kontextmanager, wenn eine Funktion für einen gesamten Test gepatcht werden soll.,
– Kontext-manager-Beispiel
Manuell mit start-und stop
patch kann auch verwendet werden, um manuell patch/unpatch mit start
und stop
Verfahren:
ich bevorzuge die Verwendung patch mit start/stop wenn ich eine Funktion benötigen, die gepatcht werden für jede Funktion in einer test-Klasse.
Dies ist wahrscheinlich die häufigste Art, wie ich Patch in meinen Tests verwende. Ich gruppiere meine Tests oft in Testklassen, in denen sich jede Methode auf das Testen derselben Funktion konzentriert. Daher möchte ich normalerweise, dass für jede Testmethode dieselben Funktionen/Objekte gepatcht werden.,
Ich habe oben bemerkt, dass ich es vorziehe, keine Klassendekoratoren zu verwenden, um dieses Problem zu lösen. Stattdessen bevorzuge ich es, Testklassenattribute zu verwenden, um Verweise auf gepatchte Funktionen zu speichern, anstatt Patchargumente für jede Testmethode mit Dekoratoren zu akzeptieren. Ich finde das trockener.
Warnung: Einer der Hauptvorteile der Decorator/Context Manager-Patch-Formulare besteht darin, dass sie für Sie bereinigen. Immer wenn Sie start
aufrufen, um Ihr Patch-Objekt einzurichten, denken Sie immer daran, stop
aufzuräumen., Andernfalls haben Sie einen Affen gepatcht Funktion/Objekt für den Rest des laufenden Programms.
Start – und Stoppbeispiel
Zusammenfassung
Patch kann verwendet werden:
- als Methode oder Klassendekor
- als Kontextmanager
- mit Start-und Stoppmethoden
Ich bevorzuge, dass meine Tests lesbar, TROCKEN und einfach zu ändern sind. Aus diesem Grund verwende ich in der Regel Start/Stop-Methoden, verwende aber auch häufig Patch-Methodendekoratoren und manchmal Patch-Kontextmanager., Es ist nützlich, die verschiedenen Geschmacksrichtungen von patch
zu kennen, da Ihr Lieblingsgeschmack möglicherweise nicht immer für das vorliegende Problem am besten geeignet ist.