Laden oder Nichtladen von Daten für Komponententests aus externen Dateien


16

Beim Testen von Einheiten stelle ich häufig fest, wie viele Daten, die ich eingebe und von denen ich erwarte, dass sie von meinen getesteten Einheiten zurückgesendet werden, in die tatsächlichen Testdateien aufgenommen werden sollten.

Der Kompromiss, mit dem ich ständig zu kämpfen habe, ist:

  • Wenn ein großer Teil des Tests (in Codevolumen) aus Eingabe- und Ausgabedaten besteht, scheint es schwierig zu sein, den Test tatsächlich zu lesen, aber ich kann die tatsächlichen Ein- und Ausgaben leicht erkennen.
  • Wenn ich die Testdaten aus Dateien lade, kann ich auf einfache Weise eine Reihe von Variationen der möglichen Dateneingabe testen und Testdaten für mehrere Tests wiederverwenden. Ich muss jedoch den Quellcode belassen, um in einer anderen Datei nachzusehen, wie genau die Eingaben lauten .

Ist einer von diesen ein Anti-Muster?


Welche Arten von Daten?
Jon Reid

@ JonReid: Meistens Text.
DudeOnRock

Antworten:


10

Um Ihre Frage direkt zu beantworten - nein, ich glaube auch nicht, dass es sich bei korrekter Verwendung um ein Anti-Pattern handelt.

--- Ausführlichere Antwort ---

Aus meiner Erfahrung denke ich, dass dies stark vom Ziel Ihres Tests abhängt. Hier ist die Faustregel, die ich in der Vergangenheit verwendet habe und die mir bei der Entscheidung geholfen hat:

Testen Sie tatsächlich eine kleine Codeeinheit? (Ein wahrer Unit-Test)

Wenn ja, dann finde ich es viel einfacher, die Daten innerhalb des Tests selbst zu erstellen, da ich sehen kann, was übergeben wird. In diesen Fällen suche ich normalerweise nach einer Jasmine- ähnlichen Bibliothek, die ich verwende, weil ich das finde Dies erleichtert die Erstellung und Pflege der Testdaten. Dies ist jedoch eine persönliche Präferenz - verwenden Sie, was Ihre Arbeit erleichtert.

Wenn nein, testen Sie wahrscheinlich das System selbst. In diesen Fällen lade ich häufig Daten von einer externen Quelle. Die Gründe dafür sind:

  1. Bei diesem Test geht es nicht um Code-Klarheit für Programmierer (obwohl dies immer noch wichtig ist - jemand muss dies beibehalten), sondern darum, genügend verschiedene Datentypen durch den gesamten Teil des Systems zu leiten, um einigermaßen sicher zu sein, dass es funktioniert.
  2. Oft schreibe ich den Installationscode, um die Testdaten zu laden und zu verwenden, aber die Daten selbst werden von einer anderen Person erstellt (in meinem Fall normalerweise von einem QS-Mitarbeiter). Diese Leute sind normalerweise keine Programmierer, daher kann ich nicht erwarten, dass sie Code bearbeiten.

So lange, so kurz, es kommt darauf an, was Sie testen und warum. Beide Ansätze sind nützlich und haben ihren Platz - wählen Sie, was für Ihre Situation am besten funktioniert.


9

Ich sehe hier keinen Kompromiss. Der Quellcode soll Algorithmen oder zumindest Geschäftslogik beschreiben, nicht große Datenmengen. Wenn Sie eine Fouriertransformation schreiben, möchten Sie sicherstellen, dass ein Sinuston korrekt auf einen einzelnen Peak, ein gemischter Sound auf mehrere Peaks usw. abgebildet ist. Hierzu ist es jedoch völlig ausreichend, eine Datei mit dem Namen sinus.wavin die Routine einzuspeisen und dies zu überprüfen Die Ausgabestruktur entspricht Ihren Erwartungen.

Sicher, technisch gesehen haben Sie keine unmittelbare Gewissheit, dass sinus.wavwirklich ein Sinuston enthalten ist, aber wie Sie sagten, gibt die Auflistung der 100.000 Amplitudenwerte in der Quelle Ihnen das auch nicht wirklich - in der Tat ist es schlimmer , weil Sie kann zumindest eine externe Datei mit einem Audio-Player abspielen, um zu überprüfen, während im Quellcode vergrabene Datenwerte im Grunde genommen nichts zu tun haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.