it-swarm.com.de

Unit Tests vs Funktionstests

Was ist der Unterschied zwischen Unit-Tests und Funktionstests? Kann ein Unit-Test auch eine Funktion testen?

370
mousey

Unit Test - Testen einer einzelnen Unit, z. B. einer Methode (Funktion) in einer Klasse, wobei alle Abhängigkeiten nachgebildet werden.

Funktionstest - AKA-Integrationstest, der einen Teil der Funktionalität in einem System testet. Dies testet viele Methoden und kann mit Abhängigkeiten wie Datenbanken oder Webdiensten interagieren.

230
bpapa

Unit-Tests sagen einem Entwickler, dass der Code die Dinge richtig macht. Funktionstests sagen einem Entwickler, dass der Code die richtigen Dinge tut .

Weitere Informationen finden Sie unter nit Testing versus Functional Testing


Eine gut erläuterte Analogie der Einzel- und Funktionstests aus der Praxis kann wie folgt beschrieben werden:

Oft wird die Entwicklung eines Systems mit dem Bau eines Hauses verglichen. Obwohl diese Analogie nicht ganz richtig ist, können wir sie erweitern, um den Unterschied zwischen Einheits- und Funktionstests zu verstehen.

Unit Testing ist analog zu einem Gebäudeinspektor, der die Baustelle eines Hauses besucht. Er konzentriert sich auf die verschiedenen internen Systeme des Hauses, das Fundament, die Rahmung, Elektrik, Sanitär und so weiter. Er stellt sicher (prüft), dass die Teile des Hauses korrekt und sicher funktionieren, dh den Bauvorschriften entsprechen.

Funktionstests in diesem Szenario sind analog zum Besuch des Hausbesitzers auf derselben Baustelle. Er geht davon aus, dass sich die internen Systeme angemessen verhalten, dass der Bauaufsichtsbeamte seine Aufgabe erfüllt. Der Hausbesitzer konzentriert sich darauf, wie es sein wird, in diesem Haus zu leben. Er kümmert sich darum, wie das Haus aussieht, ob die verschiedenen Räume eine angenehme Größe haben, ob das Haus den Bedürfnissen der Familie entspricht, ob die Fenster an einem guten Ort sind, um die Morgensonne einzufangen.

Der Hausbesitzer führt am Haus Funktionstests durch. Er hat die Perspektive des Benutzers.

Der Bauaufsichtsbeamte führt an dem Haus Einzelprüfungen durch. Er hat die Perspektive des Erbauers.


Zusammenfassend

Unit Tests werden aus einer Programmierer Perspektive geschrieben. Sie sollen sicherstellen, dass eine bestimmte Methode (oder eine Einheit) einer Klasse eine Reihe spezifischer Aufgaben ausführt.

Funktionstests werden aus der Perspektive Benutzer geschrieben. Sie stellen sicher, dass das System funktioniert ​​so, wie es die Benutzer erwarten.

480
  • Ein Unit Test testet eine nabhängige Verhaltenseinheit. Was ist eine Verhaltenseinheit? Es ist das kleinste Teil des Systems, das unabhängig von der Einheit getestet werden kann. (Diese Definition ist eigentlich zirkulär, IOW ist es wirklich keine Definition überhaupt, aber sie scheint in der Praxis ziemlich gut zu funktionieren, weil man sie irgendwie intuitiv verstehen kann.)

  • Ein Funktionstest testet eine eigenständige Funktionalität.


  • Eine Verhaltenseinheit ist sehr klein: Während ich dieses blöde Mantra "Ein-Einheit-Test pro Methode" absolut ablehne, ist es aus einer Größen- Perspektive ungefähr richtig. Eine Verhaltenseinheit ist etwas zwischen einem Teil einer Methode und vielleicht ein paar Methoden. Höchstens ein Objekt, aber nicht mehr als eines.

  • Eine Funktionalität umfasst in der Regel viele Methoden und erstreckt sich über mehrere Objekte und oft über mehrere Architekturebenen.


  • Ein Unit-Test würde ungefähr so ​​aussehen: Wenn ich die Funktion validate_country_code() aufrufe und ihr den Ländercode 'ZZ' Übergebe, sollte sie false zurückgeben.

  • Ein Funktionstest wäre: Wenn ich das Versandformular mit dem Ländercode ZZ ausfülle, sollte ich zu einer Hilfeseite weitergeleitet werden, auf der ich meinen Ländercode aus einem Menü auswählen kann.


  • Komponententests werden von Entwicklern für Entwickler aus Entwicklersicht geschrieben.

  • Funktionstests können benutzerbezogen sein. In diesem Fall werden sie aus Benutzersicht von Entwicklern zusammen mit Benutzern (oder möglicherweise mit den richtigen Tools und richtigen Benutzern selbst von den Benutzern) für Benutzer geschrieben. Oder sie stehen Entwicklern gegenüber (z. B. wenn sie eine interne Funktionalität beschreiben, die dem Benutzer nicht wichtig ist). In diesem Fall werden sie von Entwicklern für Entwickler geschrieben, jedoch immer noch aus der Perspektive des Benutzers.


  • Im ersteren Fall können die Funktionstests auch als Abnahmetests und als ausführbare Codierung von Funktionsanforderungen oder einer Funktionsspezifikation dienen, im letzteren Fall können sie auch als Integrationstests dienen.

  • Unittests ändern sich häufig, Funktionstests sollten sich innerhalb einer Hauptversion niemals ändern.


137
Jörg W Mittag

TLDR:

Zur Beantwortung der Frage: Unit Testing ist ein Untertyp des Funktionstests.


Es gibt zwei große Gruppen: Funktionale und Nichtfunktionale Tests. Die beste (nicht vollständige) Illustration, die ich gefunden habe, ist diese (Quelle: www.inflectra.com ):

enter image description here

(1) Unit Testing: Testen kleiner Code-Schnipsel (Funktionen/Methoden). Dies kann als (White-Box-) Funktionsprüfung angesehen werden.

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:

(2) Integrationstest: Wenn Sie zwei oder mehr Teile von (Sub-) Modulen oder (Sub-) Systemen zusammenfügen und prüfen, ob sie gut zusammenspielen.

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

(3) System Testing: Testen der Software als Ganzes. Dies ist so ziemlich "Integrationstests von allen Teilen zusammen".

Wenn das in Ordnung ist, dann kommt

(4) Abnahmetests: Haben wir gebaut, was der Kunde eigentlich verlangt hat? Natürlich sollten Akzeptanztests während des gesamten Lebenszyklus durchgeführt werden, nicht nur in der letzten Phase, in der Sie feststellen, dass der Kunde einen Sportwagen haben wollte und Sie einen Van gebaut haben.

enter image description here

87
Andrejs

"Funktionstest" bedeutet nicht, dass Sie eine Funktion (Methode) in Ihrem Code testen. Dies bedeutet im Allgemeinen, dass Sie die Systemfunktionalität testen. Wenn ich foo file.txt In der Befehlszeile ausführe, werden die Zeilen in file.txt Möglicherweise umgekehrt. Im Gegensatz dazu deckt ein einzelner Unit-Test im Allgemeinen einen einzelnen Fall einer einzelnen Methode ab - length("hello") sollte 5 zurückgeben und length("hi") sollte 2 zurückgeben.

Siehe auch IBM nimmt die Grenze zwischen Komponententest und Funktionstest ein .

12
Mark Rushakoff

Laut ISTQB sind diese beiden nicht vergleichbar. Funktionstests sind keine Integrationstests.

Der Komponententest ist eine der Teststufen, und die Funktionsprüfung ist eine Art der Prüfung.

Grundsätzlich gilt:

Die Funktion eines Systems (oder einer Komponente) ist das, was es tut. Dies wird normalerweise in einer Anforderungsspezifikation, einer Funktionsspezifikation oder in Anwendungsfällen beschrieben.

während

Komponententests, auch als Einheiten-, Modul- und Programmtests bekannt, suchen nach Fehlern in und überprüfen die Funktionsweise von Software (z. B. Modulen, Programmen, Objekten, Klassen usw.), die separat getestet werden können.

Laut ISTQB kann der Komponenten-/Komponententest funktionsfähig oder nicht funktionsfähig sein:

Das Testen von Komponenten kann das Testen der Funktionalität und spezifischer nichtfunktionaler Merkmale wie Ressourcenverhalten (z. B. Speicherlecks), Leistungs- oder Robustheitstests sowie Strukturtests (z. B. Entscheidungsüberdeckung) umfassen.

Zitate aus Grundlagen des Softwaretests - ISTQB-Zertifizierung

8
Dominik

Der grundlegende Unterschied besteht jedoch darin, dass Funktionstests die Anwendung von außen aus Sicht des Benutzers testen. Unit-Tests testen die Anwendung aus Sicht des Programmierers von innen. Funktionstests sollen Ihnen helfen, eine Anwendung mit der richtigen Funktionalität zu erstellen, und garantieren, dass Sie sie niemals versehentlich unterbrechen. Unit-Tests sollen Ihnen helfen, Code zu schreiben, der sauber und fehlerfrei ist.

Aus "Python TDD" von Harry Percival

7
Humoyun Ahmad

In Rails enthält der Einheitenordner Tests für Ihre Modelle, der Funktionsordner enthält Tests für Ihre Controller und der Integrationsordner enthält Tests, bei denen eine beliebige Anzahl von Controllern interagiert. Geräte 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. Du kannst this besuchen.

6

AFAIK, Unit Testing ist KEINE Funktionsprüfung. 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.

1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

Sollten unsere Funktionstests prüfen, ob wir uns mit ungültigen Eingaben anmelden können? Z.B. E-Mail hat kein @ -Zeichen, Benutzername hat mehr als einen Punkt (nur ein Punkt ist zulässig), .com erscheint vor @ usw.? Im Allgemeinen nein! Diese Art von Tests geht in Ihre Komponententests ein.

Sie können überprüfen, ob ungültige Eingaben in Komponententests zurückgewiesen wurden, wie in den folgenden Tests gezeigt.

class LoginInputsValidator
  method validate_inputs_values(email, password)
    1-If email is not like [email protected], then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

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 Funktionstest 4, um zu überprüfen, ob bei der Eingabe einer ungültigen Eingabe ein bestimmtes Fehlermeldung angezeigt wird. Wir wollen nicht testen, ob alle schlechten Eingaben abgelehnt wurden oder nicht. Das ist die Aufgabe von Unit-Tests.

3
MasterJoe2

So sehe ich das: Ein Unit-Test stellt fest, dass der Code das tut, was Sie beabsichtigt haben (z. B. Sie wollten die Parameter a und b hinzufügen, Sie fügen sie tatsächlich hinzu und subtrahieren sie nicht). Funktionstests prüfen, ob der gesamte Code zusammenarbeitet, um ein korrektes Ergebnis zu erzielen, sodass das, was Sie mit dem Code beabsichtigt haben, tatsächlich das richtige Ergebnis im System erzielt.

3
Yishai

EINHEITSTEST

Das Testen von Einheiten umfasst das Testen der kleinsten Codeeinheit, bei denen es sich normalerweise um Funktionen oder Methoden handelt. Unit-Tests werden hauptsächlich vom Entwickler der Unit/Methode/Funktion durchgeführt, da er den Kern einer Funktion versteht. Das Hauptziel des Entwicklers ist es, Code durch Unit-Tests abzudecken.

Es gibt eine Einschränkung, dass einige Funktionen nicht durch Unit-Tests getestet werden können. Auch nach dem erfolgreichen Abschluss aller Unit-Tests; es garantiert nicht den korrekten Betrieb des Produkts. Dieselbe Funktion kann in wenigen Teilen des Systems verwendet werden, während der Komponententest nur für eine Verwendung geschrieben wurde.

FUNKTIONSPRÜFUNG

Hierbei handelt es sich um eine Art Black-Box-Test, bei dem die funktionalen Aspekte eines Produkts getestet werden, ohne den Code zu untersuchen. Funktionstests werden meist von einem speziellen Software-Tester durchgeführt. Es wird positive, negative und BVA-Techniken umfassen, die nicht standardisierte Daten zum Testen der spezifizierten Funktionalität des Produkts verwenden. Die Testabdeckung wird durch Funktionstests besser durchgeführt als durch Unit-Tests. Zum Testen wird die Anwendungs-GUI verwendet, sodass Sie leichter ermitteln können, wofür genau ein bestimmter Teil der Schnittstelle zuständig ist, als dass Sie ermitteln, wofür ein Code zuständig ist.

2
Ashish Gupta

nit Test: - Unit Tests werden insbesondere verwendet, um die einzelnen Komponenten des Produkts zu testen, während das Produkt entwickelt wird. Werkzeuge vom Typ Junit und Nunit helfen Ihnen auch beim Testen des Produkts gemäß der Maßeinheit. ** Anstatt die Probleme nach der Integration zu lösen, ist es immer angenehm, sie früh in der Entwicklung zu lösen.

Funktionsprüfung: - Was die Prüfung betrifft, gibt es zwei Haupttypen der Prüfung: 1. Funktionsprüfung 2. Nicht-Funktionsprüfung.

Nicht-Funktions-Test ist ein Test, bei dem ein Tester prüft, ob das Produkt alle Qualitätsattribute erfüllt, die der Kunde nicht erwähnt hat, die Qualitätsattribute jedoch vorhanden sein sollten. Wie: -Leistung, Benutzerfreundlichkeit, Sicherheit, Belastung, Stress usw., aber im Funktionstest: - Der Kunde ist bereits mit seinen Anforderungen präsent und diese sind ordnungsgemäß dokumentiert. Die Aufgabe des Testers besteht darin, dies zu überprüfen ob die Anwendungsfunktionalität dem vorgeschlagenen System entspricht oder nicht. Zu diesem Zweck sollte der Tester die implementierte Funktionalität mit dem vorgeschlagenen System testen.

1
mohit sarsar

Unit-Tests werden normalerweise von Entwicklern durchgeführt. Das gleiche Ziel ist es, sicherzustellen, dass der Code ordnungsgemäß funktioniert. Als allgemeine Faustregel gilt, alle Pfade im Code mithilfe von Komponententests abzudecken.

Funktionsprüfung : Dies ist eine gute Referenz. Erklärung der Funktionsprüfung

0
automationuser

ganz einfach können wir sagen:

  • black Box: User Interface Test wie Funktionstest
  • white Box: Code-Test wie Unit-Test

lesen Sie mehr hier .