Was ist der Unterschied zwischen Unit-Tests und Funktionstests? Kann ein Unit-Test auch eine Funktion testen?
407
Was ist der Unterschied zwischen Unit-Tests und Funktionstests? Kann ein Unit-Test auch eine Funktion testen?
Antworten:
Unit Test - Testen einer einzelnen Einheit, z. B. einer Methode (Funktion) in einer Klasse, wobei alle Abhängigkeiten nachgebildet werden.
Funktionstest - AKA-Integrationstest zum Testen eines Teils der Funktionalität in einem System. Dies testet viele Methoden und kann mit Abhängigkeiten wie Datenbanken oder Webdiensten interagieren.
quelle
Weitere Informationen finden Sie unter Unit Testing versus Functional Testing
Eine gut erläuterte reale Analogie von Unit-Tests und Funktionstests kann wie folgt beschrieben werden:
Zusammenfassend:
Unit Tests werden aus Sicht des Programmierers geschrieben . Sie sollen sicherstellen, dass eine bestimmte Methode (oder eine Einheit ) einer Klasse eine Reihe spezifischer Aufgaben ausführt.
Funktionstests werden aus Sicht des Benutzers geschrieben . Sie stellen sicher, dass das System so funktioniert, wie es die Benutzer erwarten.
quelle
Ein Unit-Test testet eine unabhängige Verhaltenseinheit . Was ist eine Verhaltenseinheit? Es ist das kleinste Teil des Systems, das unabhängig getestet werden kann. (Diese Definition tatsächlich rund ist, IOW es ist wirklich nicht eine Definition überhaupt , aber es scheint recht gut in der Praxis zu arbeiten, da kann man sort-of versteht es intuitiv.)
Ein Funktionstest testet eine unabhängige Funktionalität.
Eine Verhaltenseinheit ist sehr klein: Während ich dieses blöde Mantra "Ein Einheitentest pro Methode" absolut nicht mag, ist es aus Sicht der Größe ungefähr richtig. Eine Verhaltenseinheit ist etwas zwischen einem Teil einer Methode und vielleicht einigen Methoden. Höchstens ein Objekt, aber nicht mehr als eines.
Eine Funktionalität umfasst normalerweise viele Methoden und schneidet über mehrere Objekte und häufig durch mehrere Architekturebenen.
Ein Unit-Test wäre ungefähr so: Wenn ich die
validate_country_code()
Funktion aufrufe und ihr den Ländercode übergebe'ZZ'
, sollte sie zurückgegeben werdenfalse
.Ein Funktionstest wäre: Wenn ich das Versandformular mit dem Ländercode ausfülle,
ZZ
sollte ich auf eine Hilfeseite weitergeleitet werden, auf der ich meinen Ländercode aus einem Menü auswählen kann.Unit-Tests werden von Entwicklern für Entwickler aus Entwicklersicht geschrieben.
Funktionstests können für Benutzer aus Sicht des Benutzers benutzerbezogen sein. In diesem Fall werden sie von Entwicklern zusammen mit Benutzern (oder möglicherweise mit den richtigen Tools und den richtigen Benutzern sogar von den Benutzern selbst) für Benutzer geschrieben. Oder sie stehen Entwicklern gegenüber (z. B. wenn sie eine interne Funktionalität beschreiben, die dem Benutzer egal ist). In diesem Fall werden sie von Entwicklern für Entwickler geschrieben, aber immer noch aus der Sicht des Benutzers.
Im ersteren Fall können die Funktionstests auch als Abnahmetests und als ausführbare Codierung von Funktionsanforderungen oder als Funktionsspezifikation dienen, im letzteren Fall können sie auch als Integrationstests dienen.
Unit-Tests ändern sich häufig, Funktionstests sollten sich innerhalb einer Hauptversion niemals ändern.
quelle
TLDR:
Um die Frage zu beantworten: Unit Testing ist ein Subtyp von Functional Testing.
Es gibt zwei große Gruppen: Funktionelle und Non-Functional Testing. Die beste (nicht erschöpfende) Illustration, die ich gefunden habe, ist diese (Quelle: www.inflectra.com ):
Wenn Funktionen zusammengestellt werden, erstellen Sie ein Modul = ein eigenständiges Teil, möglicherweise mit einer Benutzeroberfläche, die getestet werden kann (Modultest). Sobald Sie mindestens zwei separate Module haben, kleben Sie sie zusammen und dann kommt:
Dann integrieren Sie das 3. Modul, dann das 4. und 5. Modul in der Reihenfolge, in der Sie oder Ihr Team es für richtig halten, und sobald alle Puzzleteile zusammengesetzt sind, kommt es
Wenn das in Ordnung ist, dann kommt
quelle
Functional Test
kein standardisierter Begriff ist und für verschiedene Personen unterschiedliche Bedeutungen hat."Funktionstest" bedeutet nicht, dass Sie eine Funktion (Methode) in Ihrem Code testen. Im Allgemeinen bedeutet dies, dass Sie die Systemfunktionalität testen. Wenn ich
foo file.txt
über die Befehlszeile ausgeführt werde, werden die Zeilenfile.txt
möglicherweise umgekehrt. Im Gegensatz dazu deckt ein einzelner Einheitentest im Allgemeinen einen einzelnen Fall einer einzelnen Methode ab -length("hello")
sollte 5 undlength("hi")
2 zurückgeben.Siehe auch IBMs Ansatz zwischen Unit-Test und Funktionstest .
quelle
Der grundlegende Unterschied besteht jedoch darin, dass Funktionstests die Anwendung aus Sicht des Benutzers von außen testen. Unit-Tests testen die Anwendung von innen aus Sicht des Programmierers. Funktionstests sollen Ihnen helfen, eine Anwendung mit der richtigen Funktionalität zu erstellen, und sicherstellen, dass Sie sie niemals versehentlich beschädigen. Unit-Tests sollen Ihnen helfen, sauberen und fehlerfreien Code zu schreiben.
Entnommen aus dem Buch "Python TDD" von Harry Percival
quelle
Laut ISTQB sind diese beiden nicht vergleichbar. Funktionstests sind keine Integrationstests.
Unit-Test ist eine der Teststufen und Funktionstests sind Testarten.
Grundsätzlich:
während
Laut ISTQB kann der Komponenten- / Komponententest funktionsfähig oder nicht funktionsfähig sein:
Zitate aus Grundlagen des Softwaretests - ISTQB-Zertifizierung
quelle
In Rails soll der Einheitenordner Tests für Ihre Modelle enthalten, der Funktionsordner soll Tests für Ihre Controller enthalten, und der Integrationsordner soll Tests enthalten, bei denen eine beliebige Anzahl von Controllern interagieren. Vorrichtungen sind eine Möglichkeit, Testdaten zu organisieren. Sie befinden sich im Fixtures-Ordner. Die Datei test_helper.rb enthält die Standardkonfiguration für Ihre Tests. u können besuchen diese .
quelle
So sehe ich das: Ein Komponententest stellt fest, dass der Code das tut, was Sie mit dem Code beabsichtigt haben (z. B. wollten Sie die Parameter a und b hinzufügen, Sie fügen sie tatsächlich hinzu und subtrahieren sie nicht). Funktionstests testen, ob der gesamte Code zusammenarbeitet, um ein korrektes Ergebnis zu erhalten, sodass das, was Sie mit dem Code beabsichtigt haben, tatsächlich das richtige Ergebnis im System erzielt.
quelle
AFAIK, Unit Testing ist KEIN Funktionstest. Lassen Sie mich mit einem kleinen Beispiel erklären. Sie möchten testen, ob die Anmeldefunktion einer E-Mail-Webanwendung funktioniert oder nicht, genau wie ein Benutzer. Dafür sollten Ihre Funktionstests so sein.
Sollten unsere Funktionstests prüfen, ob wir uns mit ungültigen Eingaben anmelden können? Z.B. E-Mail hat kein @ -Symbol, Benutzername hat mehr als einen Punkt (nur ein Punkt ist zulässig), .com erscheint vor @ usw.? Im Allgemeinen nein! Diese Art von Tests fließt in Ihre Unit-Tests ein.
Sie können überprüfen, ob ungültige Eingaben in Komponententests zurückgewiesen werden, wie in den folgenden Tests gezeigt.
Beachten Sie, dass der Funktionstest 4 tatsächlich das tut, was der Komponententest 1 tut. Manchmal können Funktionstests aus verschiedenen Gründen einige (nicht alle) Tests wiederholen, die durch Komponententests durchgeführt wurden. In unserem Beispiel verwenden wir den Funktionstest 4, um zu überprüfen, ob bei der Eingabe einer ungültigen Eingabe eine bestimmte Fehlermeldung angezeigt wird . Wir möchten nicht testen, ob alle fehlerhaften Eingaben abgelehnt werden oder nicht. Das ist die Aufgabe von Unit-Tests.
quelle
EINHEITSTEST
Das Testen von Einheiten umfasst das Testen der kleinsten Codeeinheit, bei der es sich normalerweise um Funktionen oder Methoden handelt. Unit-Tests werden meistens vom Entwickler von Unit / Methode / Funktion durchgeführt, da diese den Kern einer Funktion verstehen. Das Hauptziel des Entwicklers ist es, Code durch Unit-Tests abzudecken.
Es gibt eine Einschränkung, dass einige Funktionen nicht durch Komponententests getestet werden können. Auch nach erfolgreichem Abschluss aller Unit-Tests; Es garantiert nicht den korrekten Betrieb des Produkts. Die gleiche Funktion kann in wenigen Teilen des Systems verwendet werden, während der Komponententest nur für eine Verwendung geschrieben wurde.
FUNKTIONSPRÜFUNG
Es handelt sich um eine Art Black-Box-Test, bei dem die Funktionsaspekte eines Produkts getestet werden, ohne den Code zu untersuchen. Funktionstests werden meist von einem speziellen Software-Tester durchgeführt. Es umfasst positive, negative und BVA-Techniken, bei denen nicht standardisierte Daten zum Testen der angegebenen Funktionalität des Produkts verwendet werden. Die Testabdeckung wird durch Funktionstests besser durchgeführt als durch Unit-Tests. Es verwendet die Anwendungs-GUI zum Testen, sodass es einfacher ist, zu bestimmen, wofür genau ein bestimmter Teil der Schnittstelle verantwortlich ist, als zu bestimmen, wofür ein Code verantwortlich ist.
quelle
ganz einfach können wir sagen:
Lesen Sie hier mehr .
quelle
Unit Test : - Unit Test wird insbesondere verwendet, um das Produkt Komponente für Komponente zu testen, insbesondere während das Produkt in der Entwicklung ist. Die Tools vom Typ Junit und Nunit helfen Ihnen auch beim Testen des Produkts gemäß der Einheit. ** Anstatt die Probleme nach der Integration zu lösen, ist es immer angenehm, sie früh in der Entwicklung zu lösen.
Funktionstests: - In Bezug auf die Tests gibt es zwei Haupttypen von Tests: 1. Funktionstest 2. Nichtfunktionstest.
Non-Functional Test ist ein Test, bei dem ein Tester prüft, ob das Produkt alle Qualitätsmerkmale ausführt, die der Kunde nicht erwähnt, aber diese Qualitätsmerkmale sollten vorhanden sein. Wie: - Leistung, Benutzerfreundlichkeit, Sicherheit, Belastung, Belastung usw., aber im Funktionstest : - Der Kunde ist bereits mit seinen Anforderungen anwesend und diese sind ordnungsgemäß dokumentiert. Die Aufgabe des Testers besteht darin, zu überprüfen, ob die Anwendungsfunktionalität entsprechend funktioniert zum vorgeschlagenen System oder nicht. Zu diesem Zweck sollte der Tester die implementierte Funktionalität mit dem vorgeschlagenen System testen.
quelle
Unit-Tests werden normalerweise von Entwicklern durchgeführt. Das gleiche Ziel ist es, sicherzustellen, dass der Code ordnungsgemäß funktioniert. Als Faustregel gilt, dass alle Pfade im Code mithilfe von Unit-Tests abgedeckt werden.
Funktionstests : Dies ist eine gute Referenz. Funktionsprüfung Erklärung
quelle