Unit-Tests mit Netzwerk-Code angewiesen

stimmen
8

Ich versuche, besser zu Einheit sein meinen Code zu testen, aber im Moment bin ich eine Menge Code zu schreiben, die mit Remote-Systemen beschäftigt. SNMP, WMI, diese Art der Sache. Bei den meisten Klassen kann ich Objekte Mock-up, sie zu testen, aber wie geht man mit dem Gerät ein echtes System testen? Zum Beispiel, wenn meine Klasse und wird für einen Server des Win32_LogicalDisk Objekt geht, wie könnte ich es Einheit testen?

Veröffentlicht am 04/09/2008 um 19:00
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
5

Angenommen, Sie bedeuten „Wie teste ich gegen Dinge, die schwer / unmöglich zu verspotten sind“:

Wenn Sie eine Klasse haben , dass „erlischt und erhält die Win32_LogicalDisk Objekt für einen Server“ und tut etwas anderes (verbraucht die ‚Win32_LogicalDisk‘ Objekt in irgendeiner Weise), vorausgesetzt , Sie die Stücke der Klasse testen wollen , die dieses Objekt verbrauchen, Sie verwenden können , Dependency Injection , damit Sie die ‚Win32_LogicalDisk‘ Objekt verspotten. 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()

Dann in Ihrem Testcode Einheit, übergeben in einem ‚LogicalDiskFactory‘, die ein Mock-Objekt für die ‚Win32_LogicalDisk‘ zurückgibt.

Beantwortet am 04/09/2008 um 20:12
quelle vom benutzer

stimmen
2

Der einfachste Weg, um Dinge zu testen, die schwer zu verspotten sind, ist den Code in der Weise, dass Ihr Code (Logik, die es zu testen gilt ist) Refactoring an einem Ort ist und andere Dinge, die Ihren Code Benutzung finden Sie in separaten Modul (n). Das Modul ist einfach zu verspotten und auf diese Weise können Sie sich auf Ihre Geschäftslogik konzentrieren.

Beantwortet am 03/11/2008 um 22:44
quelle vom benutzer

stimmen
1

Sie könnten eine Reihe von „Test-Stubs“ erstellen, die die Kernbibliothek Routinen ersetzen und bekannten Werten zurückkehren, vielleicht nach einer geeigneten Verzögerungen.

Als Beispiel brauche ich vor kurzem Code zu entwickeln , in einem 3rd-Party - Produkt ausführen zu können. Die Herausforderung bestand darin , dass unser „Partner“ würde die Erstellung und Integration mit ihrem Basis - Code tun: Ich war nicht zu gelassen betrachte ihren Code in jeder Form! Meine Strategie war einen sehr einfachen Emulator zu bauen , das tat , was ich dachte , ihr Code hat, basierend auf Informationen von ihren Ingenieuren. Wir haben eine Sprache , die es einfach gemacht , um verschiedene Stücke des Emulators in und aus jedem Build zu wechseln, so konnte ich eine enorme Menge an Tests, bevor unserem Partner beteiligt jede neue Iteration zu bauen.

Ich würde die gleiche Methode verwenden wieder, wie Software-Probleme in diesem bestimmten Produkt sind etwa eine Größenordnung weniger als in unserem nächsten zuverlässigste Produkt!

Beantwortet am 02/11/2008 um 05:24
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more