Was sind Tests?

Beim Schreiben von Software können Sie durch Tests prüfen, ob sie korrekt funktioniert. Tests können grob definiert werden als der Prozess der Ausführung von Software in bestimmten um sicherzustellen, dass alles wie beabsichtigt funktioniert.

Erfolgreiche Tests geben Ihnen die Gewissheit, dass Sie Ihre Abhängigkeiten aktualisieren, wird die bereits geschriebene Software wie Sie es erwarten. Tests können auch dazu beitragen, gegen unwahrscheinliche Szenarien oder unerwartete Eingaben vor.

Hier einige Beispiele für Verhaltensweisen im Web, die Sie testen können:

  • Dafür sorgen, dass die Funktion einer Website ordnungsgemäß funktioniert, wenn auf eine Schaltfläche geklickt wird.
  • Die Bestätigung, dass eine komplexe Funktion die richtigen Ergebnisse liefert
  • Ausführen einer Aktion, die eine Nutzeranmeldung erfordert
  • Überprüfen, ob ein Formular bei der Eingabe fehlerhafter Daten einen Fehler richtig meldet
  • Sie stellen sicher, dass eine komplexe Webanwendung auch dann funktioniert, wenn Nutzende Bandbreite niedrig ist oder offline geht.

Automatisierte und manuelle Tests im Vergleich

Sie können Ihre Software auf zwei allgemeine Arten testen: automatisierte Tests und manuelle Tests. Tests durchführen.

Bei manuellen Tests führt der Mensch eine Software direkt aus, z. B. das Laden eines und überprüfen, ob sie wie erwartet funktioniert. Manuell Tests lassen sich einfach erstellen oder definieren, z. B.: Lädt Ihre Website? Können Sie diese Aktionen ausführen? – aber jeder Durchlauf kostet eine enorme Summe die Zeit des Menschen. Menschen sind sehr kreativ, was eine Art von Tests ermöglicht sogenannten explorativen Tests, können wir immer noch schlecht wahrnehmen, Uneinheitlichkeiten, vor allem, wenn Sie dieselbe Aufgabe mehrmals ausführen.

Automatisierte Tests sind alle Prozesse, mit denen Tests kodifiziert und ausgeführt werden können. wiederholt, um das beabsichtigte Verhalten Ihrer Software zu überprüfen, ohne wiederholte Schritte wie die Einrichtung oder die Prüfung der Ergebnisse von einem Menschen ausführen zu lassen. Wichtig: Sobald automatische Tests konfiguriert sind, können sie häufig ausgeführt werden. Das ist immer noch eine sehr weit gefasste Definition, Tests können ganz unterschiedliche Formen und Formen annehmen. Der Großteil dieses Kurses mit automatisierten Tests in der Praxis.

Manuelle Tests haben ihre Platz, oft als Vorläufer des Schreibens automatisierter Tests. aber auch wenn automatisierte Tests unzuverlässig oder umfangreich werden, oder umständlich zu schreiben.

Die Grundlagen anhand eines Beispiels

Für uns als Webentwickler, die JavaScript oder ähnliche Sprachen schreiben, ein solches Skript sein, das Sie jeden Tag ausführen, über Node.js oder durch Laden in einem Browser:

import { fibonacci } from "../src/math.js";

if (fibonacci(0) !== 0) {
  throw new Error("Invalid 0th fibonacci result");
}
const fib13 = fibonacci(13);
if (fib13 !== 233) {
  throw new Error("Invalid 13th fibonacci result, was=${fib13} wanted=233");
}

Dies ist ein vereinfachtes Beispiel, das die folgenden Informationen liefert:

  • Dies ist ein Test, da damit Software, das Fibonacci ) und stellt sicher, dass wie vorgesehen funktioniert, indem die Ergebnisse auf erwartete Werte. Ist das nicht der Fall, wird ein Fehler verursacht, der JavaScript drückt dies durch Auslösen eines Error aus.

  • Auch wenn Sie dieses Skript möglicherweise manuell in Ihrem Terminal oder einem -Browser ist dies ein automatischer Test, da er wiederholt ausgeführt werden kann. ohne dass Sie einzelne Schritte ausführen müssen. Auf der nächsten Seite, wobei durchgeführt werden.

  • Auch wenn bei diesem Test keine Bibliotheken verwendet werden, ist JavaScript die überall ausgeführt werden können, es ist immer noch ein Test. Es gibt viele Tools, die Ihnen dabei helfen, Schreiben von Tests, einschließlich solcher, die später in diesem Kurs behandelt werden. sie alle immer noch nach dem Grundprinzip, einen Fehler zu verursachen, wenn etwas schiefgeht.

Bibliotheken in der Praxis testen

Die meisten Bibliotheken oder integrierten Test-Frameworks bieten zwei wichtige Primitive, die Machen Sie Tests einfacher: Assertions und eine Möglichkeit zum Definieren unabhängiger Tests. Diese werden im nächsten Abschnitt unter Assertions und anderen Primitiven. Allgemein gesagt, Denken Sie daran, dass fast alle Tests, die Sie sehen oder schreiben, mit diesen Primitiven.

Mit Assertions können Sie die Prüfung eines Ergebnisses kombinieren und einen Fehler verursachen, wenn wenn etwas schiefgeht. Sie können den vorherigen Test beispielsweise prägnanter machen. mit der Einführung von assert:

import { fibonacci } from "../src/math.js";
import { assert } from "a-made-up-testing-library";

assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");

Sie können diesen Test weiter verbessern, indem Sie unabhängige Tests definieren, die optional in Suites gruppiert. In der folgenden Suite wird Fibonacci unabhängig getestet. und der Catalan-Funktion:

import { fibonacci, catalan } from "../src/math.js";
import { assert, test, suite } from "a-made-up-testing-library";

suite("math tests", () => {
  test("fibonacci function", () => {
    assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
    assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");
  });
  test("relationship between sequences", () => {
    const numberToCheck = 4;
    const fib = fibonacci(numberToCheck);
    const cat = catalan(numberToCheck);
    assert.isAbove(fib, cat);
  });
});

In diesem Kontext von Softwaretests bezieht sich test als Substantiv auf einen Testfall: ein einzelnes, unabhängiges, adressierbares Szenario, wie die „Beziehung zwischen Sequenzen“ Testlauf im vorherigen Beispiel.

Individuell benannte Tests sind unter anderem für die folgenden Aufgaben nützlich:

  • Festlegen, wie ein Test im Laufe der Zeit erfolgreich oder fehlschlägt
  • Heben Sie einen Fehler oder ein Szenario namentlich hervor, damit Sie einfacher testen können, Szenario gelöst wird.
  • Ausführen einiger Tests unabhängig von anderen, z. B. über einen glob-Filter.

Eine Möglichkeit, sich Testfälle vorzustellen, Einheitentests: arrangieren, handeln und durchsetzen. Jeder Testlauf hat im Kern folgende Maßnahmen:

  • Ordnen Sie einige Werte oder Status an (dies können nur hartcodierte Eingabedaten sein).
  • Führen Sie eine Aktion aus, z. B. das Aufrufen einer Methode.
  • Bestätigen Sie die Ausgabewerte oder den aktualisierten Status (mit assert).

Umfang der Tests

Die Codebeispiele im vorherigen Abschnitt beschreiben einen Einheitentest, da sie kleinere Teile der Software zu testen, sich dabei oft auf eine einzelne Datei zu konzentrieren, nur die Ausgabe einer einzelnen Funktion. Die Testkomplexität wächst mit der Zeit Code aus mehreren Dateien, Komponenten oder sogar verschiedenen (manchmal außerhalb Ihrer Kontrolle, z. B. Netzwerkdienste oder Verhalten einer externen Abhängigkeit). Aus diesem Grund werden Testtypen oft basierend auf ihrem Umfang oder ihrer Skala.

Neben Einheitentests sind einige Beispiele für andere Testtypen Komponententests. , visuelle Tests und Integrationstests. Keiner dieser Namen hat strikten Definitionen, die je nach Situation unterschiedliche Bedeutungen haben können. verwenden Sie sie als Leitfaden und überlegen Sie, für Sie funktioniert. Was ist beispielsweise eine Komponente, die in Ihrem System getestet wird? Für React-Entwicklern zu sein. Dies kann buchstäblich einer „React-Komponente“ zugeordnet werden, in anderen Kontexten eine andere Bedeutung haben.

Der Maßstab eines einzelnen Tests kann sie in ein Konzept einbinden, das oft als die sogenannte Testpyramide, eine gute Faustregel dafür, und wie er funktioniert.

<ph type="x-smartling-placeholder">
</ph> Die Testpyramide
    mit End-to-End-Tests (E2E) oben, Integrationstests in der Mitte und
    Unittests unten.
Die Testpyramide

Diese Idee wurde iteriert und verschiedene andere Formen wurden inzwischen bekannt gegeben, wie die Test- oder die das Testen der Eiskegel. Ihre Prioritäten beim Verfassen von Tests werden wahrscheinlich Codebasis. Eine gängige Funktion ist jedoch, dass einfachere Tests wie Einheitentests, lassen sich schneller ausführen, sind leichter zu schreiben, sodass Sie mehr von ihnen haben. Tests in einem begrenzten Umfang, während komplexe Tests wie End-to-End-Tests schwierig zu schreiben, aber es kann einen größeren Umfang testen. Die oberste Ebene vieler „shapes“ testen manuelle Tests, da eine gewisse Nutzerinteraktion zu komplex, um sie in einen automatisierten Test zu codieren.

Diese Typen werden in den automatischen Tests.

Wissen testen

Welche Primitive bieten die meisten Testbibliotheken und -Frameworks?

Eine Möglichkeit, Tests in der Testpyramide zu kategorisieren.
Ein Runner-Dienst, der einen Cloud-Anbieter verwendet.
Die Fähigkeit, unabhängige Tests nach Funktion zu definieren.
Assertions, die Ausnahmen verursachen, wenn sie nicht erfüllt werden