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?
unit-testing
anti-patterns
unit-test-data
DudeOnRock
quelle
quelle
Antworten:
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:
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.
quelle
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.wav
in die Routine einzuspeisen und dies zu überprüfen Die Ausgabestruktur entspricht Ihren Erwartungen.Sicher, technisch gesehen haben Sie keine unmittelbare Gewissheit, dass
sinus.wav
wirklich 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.quelle