Frage

Ich versuche, die Unit-Tests meines Codes zu verbessern, aber im Moment schreibe ich viel Code, der sich mit Remote-Systemen befasst.SNMP, WMI und so etwas.Bei den meisten Klassen kann ich Objekte modellieren, um sie zu testen, aber wie geht man mit Unit-Tests eines echten Systems um?Wenn meine Klasse beispielsweise ausgeht und das Win32_LogicalDisk-Objekt für einen Server abruft, wie könnte ich es dann möglicherweise einem Unit-Test unterziehen?

War es hilfreich?

Lösung

Angenommen, Sie meinten „Wie teste ich anhand von Dingen, die schwer/unmöglich zu verspotten sind“:

Wenn Sie eine Klasse haben, die „ausgeht und das Win32_LogicalDisk-Objekt für einen Server abruft“ UND etwas anderes tut (das „Win32_LogicalDisk“-Objekt auf irgendeine Weise verbraucht), vorausgesetzt, Sie möchten die Teile der Klasse testen, die dieses Objekt verbrauchen, Sie Kann benutzen Abhängigkeitsspritze damit Sie das Objekt „Win32_LogicalDisk“ verspotten können.Zum Beispiel:

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

Übergeben Sie dann in Ihrem Komponententestcode eine „LogicalDiskFactory“, die ein Scheinobjekt für „Win32_LogicalDisk“ zurückgibt.

Andere Tipps

Der einfachste Weg, Dinge zu testen, die schwer zu verspotten sind, besteht darin, den Code so umzugestalten, dass sich Ihr Code (die Logik, die es wert ist, getestet zu werden) an einem Ort befindet und andere Dinge, die Ihr Code verwendet, in separaten Modulen sind.Das Modul lässt sich leicht simulieren und Sie können sich auf diese Weise auf Ihre Geschäftslogik konzentrieren.

Sie können eine Reihe von „Test-Stubs“ erstellen, die die Kernroutinen der Bibliothek ersetzen und bekannte Werte zurückgeben, möglicherweise nach geeigneten Verzögerungen.

Beispielsweise musste ich kürzlich Code entwickeln, der in einem Drittanbieterprodukt ausgeführt werden soll.Die Herausforderung bestand darin, dass unser „Partner“ die Kompilierung und Integration mit seinem Basiscode übernehmen würde:Das durfte ich nicht ansehen ihren Code in irgendeiner Form!Meine Strategie bestand darin, einen sehr einfachen Emulator zu bauen, der das tat, was ich wollte Gedanke Ihr Code tat dies, basierend auf Informationen ihrer Ingenieure.Wir haben eine Sprache verwendet, die es einfach machte, verschiedene Teile des Emulators in jeden Build ein- und auszutauschen, sodass ich eine enorme Menge an Tests durchführen konnte, bevor ich unseren Partner mit der Erstellung jeder neuen Iteration betraute.

Ich würde die gleiche Methode noch einmal verwenden, da die Softwareprobleme bei diesem bestimmten Produkt um eine Größenordnung geringer sind als bei unserem nächstzuverlässigsten Produkt!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top