Ich versuche, meinen Code besser zu testen, aber momentan schreibe ich viel Code, der sich mit entfernten Systemen beschäftigt. SNMP, WMI, so etwas. Mit den meisten Klassen kann ich Objekte nachbilden, um sie zu testen, aber wie gehst du damit um, ein echtes System zu testen? Wenn meine Klasse beispielsweise das Objekt "Win32_LogicalDisk" für einen Server abruft, wie könnte ich es dann möglicherweise testen?
Angenommen, du meintest "Wie teste ich gegen Dinge, 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 irgendwie verbraucht), vorausgesetzt, Sie möchten die Teile der Klasse testen, die diese verbrauchen Objekt können Sie Dependency Injection verwenden, damit Sie das Objekt 'Win32_LogicalDisk' vortäuschen können. Zum Beispiel:
%Vor%Geben Sie dann in Ihrem Unit-Test-Code eine 'LogicalDiskFactory' ein, die ein Mock-Objekt für die 'Win32_LogicalDisk' zurückgibt.
Der einfachste Weg, Dinge zu testen, die schwer nachzuahmen sind, besteht darin, den Code so zu refactorisieren, wie sein Code (zu testende Logik) an einem Ort ist und andere Dinge, die Ihr Code verwendet, in separaten Modulen sind. . Das Modul ist leicht nachzuahmen und Sie können sich auf Ihre Geschäftslogik konzentrieren.
Sie könnten eine Reihe von "Test-Stubs" erstellen, die die Kernbibliotheksroutinen ersetzen und bekannte Werte zurückgeben, möglicherweise nach geeigneten Verzögerungen.
Als Beispiel musste ich kürzlich Code entwickeln, der innerhalb eines Drittanbieterprodukts ausgeführt werden kann. Die Herausforderung bestand darin, dass unser "Partner" das Kompilieren und die Integration mit ihrem Basiscode durchführen würde: Ich durfte ihren Code in keiner Form sehen ! Meine Strategie war es, einen sehr einfachen Emulator zu erstellen, der, was ich dachte ihr Code getan hat, basierend auf Informationen von ihren Ingenieuren. Wir verwendeten eine Sprache, die es einfach machte, verschiedene Teile des Emulators in jeden Build hinein und wieder heraus zu wechseln, so dass ich eine Menge Tests durchführen konnte, bevor wir unseren Partner an der Erstellung jeder neuen Iteration beteiligten.
Ich würde die gleiche Methode noch einmal verwenden, da Softwareprobleme in diesem bestimmten Produkt um eine Größenordnung weniger als bei unserem nächsten zuverlässigsten Produkt sind!
Tags und Links unit-testing testing wmi