Dieser Artikel wurde maschinell übersetzt.

Moderne Apps

Testen moderner Websites und Apps von A bis Z

Rachel Appel

Rachel AppelSoftware ist weitaus komplexer als je zuvor. Ob es eine app für Windows, iOS, Web, Android, ein Internet der Dinge (IoT) Gerät oder eine Smartwatch ist —, dass Software viel tut. Folglich muß die Software liegen. Es muss nach Angaben funktionieren. Also liegt es an Entwicklern, ihre Software zu überprüfen.

Ohne Prüfung, ist es schwierig zu überprüfen, ob der Code tut was es soll. Es ist auch schwieriger, um Code, um Wanzen zu isolieren. Während es wichtig um zu testen, es ist auch wichtig, aus den richtigen Gründen zu testen nicht nur für den Willen der Prüfung oder Prahlerei etwa 100 Prozent Rechte Abdeckung. Kleine smart Tests gewinnen immer sinnlose Tests, die die gesamte Codebasis zu decken. In diesem Artikel wird behandelt wie Einheit testen Server- und clientseitigen Code, sowie wie automatisieren UI testing mit UI-Tests (CUITs) codiert. Diese drei grundlegenden Bereiche der Prüfung werden die wichtigsten Aspekte Ihrer Software-Funktionalität testen.

Einheit um Einheit

Komponententests Hilfe verringern Fehler und Unterlagen für den Code, die sie testen. Regression, Nutzerakzeptanz, UI-Automatisierung und andere Maßnahmen zur Qualitätssicherung sind ebenfalls wichtig. Haushalte sind oft eng und Teams sind klein, so oft du musst man über einen anderen wählen. Es liegt an dir zu entscheiden, wie viel Qualitätssicherung in Ihrer app geht. Absolutes Minimum Komponententests und UI-Tests hilft, Qualität hoch zu halten.

Es gibt eine Reihe von open Source und kommerziellen Komponententests Software-Pakete zur Verfügung. Viele der beliebten testen-Suiten veröffentlichen eine Paket NuGet, sodass Sie problemlos direkt in Visual Studioherunterladen können. Einige der beliebten c# Testframeworks sind xUnit, nUnit, MSTest und TestDriven.NET. Zum Testen von JavaScript gibt es qUnit, JSUnit und YUI-Test.

Unit-Tests oft den Standardtyp der Test ist, gibt es andere Möglichkeiten, Ihre Software zu testen. Die unter anderem Benutzeroberflächenautomatisierung oder CUITs, Benutzerakzeptanztests, Regressionstests, Integrationstests und alle Arten von Spezial-Tests. Wikipedia listet Dutzende von Möglichkeiten, um Software zu testen bit.ly/14066q8.

Gute Komponententests Testen nur eine Funktion pro Test. Das Prinzip der einzigen Verantwortung (SRP) ist eine Möglichkeit, sicherzustellen, dass Ihr Code ist modular. SRP bedeutet der Code konzentriert sich auf eine Sache und macht das Ding gut, ob es Code zur Implementierung oder der Test selbst ist. Unit-Tests sollten nicht direkt auf Datenbanken, Dateien oder andere Ressourcen zugreifen. Sie sollten Vertrauen auf mock-Objekte, die diese Ressourcen zu simulieren, und genau wie bei jedem anderen Code-Unit-Tests sollte klein sein.

Eine weitere Möglichkeit, gute Tests zu schreiben ist durch eine Orientierung an Prinzipien testgetriebene Entwicklung (TDD). TDD ist eine Möglichkeit, Code um eine Reihe von Tests zu entwickeln. Der Entwickler erstellt Tests, die fehlschlagen, dann schreibt der richtige Code angepasst auf die Probe, dann gestaltet. Ich nenne es "Rot, grün, umgestalten." Diese Technik hilft Ihnen, strukturieren und schreiben Sie Code konsistent. Und Konsistenz ist eine Tugend in der Softwareentwicklung. Obwohl TDD nicht in den Anwendungsbereich dieses Artikels ist, kümmer mich drum, und probieren Sie es aus mit Ihrem Team.

Unit-Tests mit xUnit und qUnit wird in diesem Artikel behandelt. Ich werde auch UI-Automatisierung-Tests mit CUITs anschauen. Auf diese Weise können Sie mit den wichtigsten Arten von Tests vertraut, die Sie benötigen.

Testen Sie serverseitige c# mit xUnit

Sie werden erfreut sein zu erfahren, wie einfach es ist, ein Unit-Test-Paket in Visual Studiozu integrieren. Viele Frameworks stehen als NuGet Paket zur Verfügung. Beispielsweise wenn Sie xUnit verwenden möchten, nur starten Sie den NuGet- Paket-Manager, suchen Sie nach "xUnit", und klicken Sie dann um das Kernpaket und seine Test-Runner-Paket zu installieren. XUnit können Sie testen, ASP.NET Web-Sites, Windows Forms, Windows Presentation Foundation (WPF), Windows-Speicher und Windows Phone apps sowie jede Sprache, die in der Microsoft Intermediate Language oder MSIL kompiliert wird. Sie können sogar Einheit testen f# mit xUnit — das ist die Microsoft-Entwicklungstechnologien.

Um xUnit verwenden, fügen Sie ein Klassenbibliotheksprojekt zu Ihrer Lösung. Der Einfachheit halber empfiehlt es sich, zu den allgemeinen Namenskonventionen halten so etwas wie ProjectName.Tests, wobei "Projektname" der Name des Projekts ist, die Sie testen wollen. Sicherstellen Sie in Ihrem Test, dass Sie einen Verweis auf dieses Projekt hinzufügen. Geben Sie den Namen und den Test, und einer Klasse etwas zu Testzwecken eine Klassendatei hinzufügen.

Abbildung 1 zeigt ein Beispiel für eine xUnit Test-Klasse mit einem Test, zusammen mit dem Code es testet. Der Code in Abbildung 1 bestimmt einen Kundenstatus basierend auf wie viel sie ausgegeben haben. Die Tests in Abbildung 1 stellen Sie sicher, der Code ist korrekt.

Abbildung 1 Testen einer Stichprobe von xUnit Code

// Unit tests that test customer-related features
public class CustomerTests
{
  [Theory]
  [InlineData(99D)]
  [InlineData(1001D)]
  [InlineData(5001D)]
  [InlineData(10001D)]
  public void VerifyCustomerStatus(double TotalSpent) {
    // Arrange           
    var status = new Status();
    var testStatus=OrderForm.Models.Status.StatusLevel.None;
    // Act
    var currentStatus = status.GetCurrentStatus(TotalSpent);
    // Assert           
    Assert.True(testStatus <= currentStatus);
  }
}
// Logic that sets the customer status
public class Status
{
  public StatusLevel GetCurrentStatus(decimal ForAmount)
  {
    var level = StatusLevel.None;
    var amt = Convert.ToInt32(ForAmount);
    if (amt > 1000 && amt <= 5000) { level = StatusLevel.Silver; }
    else if (amt > 5000 && amt <= 10000) { level = StatusLevel.Gold; }
    else if (amt > 10000) { level = StatusLevel.Platinum; }
    return level;
  }
  public enum StatusLevel
  {
    None = 0,
    Silver = 1,
    Gold = 2,
    Platinum = 3
  }          
}

In Unit-Test-Methoden, Sie finden die beliebten anordnen, handeln, geltend zu machen (oder AAA) Muster, die auch in dargestellt ist Abbildung 1. Ordnen Sie zunächst die Testbedingungen dann wirken auf diese Bedingungen, und schließlich behaupten die Ausgabe.

AAA können Sie auf alles, aber wenn Sie Qualitätssoftware möchten, müssen Sie aussagekräftige Tests. Testframeworks neigen dazu, mit einer Flotte von Behauptungen, wie z. B. Equal, NotEqual, kommen dieselben, NotSame, Contains, DoesNotContain, InRange, IsNotEmpty und einigen anderen. Natürlich die genaue Benennung oder Methoden nicht das gleiche, aber jeder Rahmen bietet Ihnen mehrere zur Auswahl.

Sie haben vielleicht bemerkt [Theorie] und [InlineData]-Attributen schmücken die Test-Klasse anstelle des beliebten [Test]-Attributs. Beim Testmethoden ohne Parameter verfügen, im xUnit können [darauf]-Attribut Sie die Methode als eine Testmethode kennzeichnen. Diese Datenanmerkungen lassen den Test den TotalSpent-Parameter akzeptieren, Sie in der Testmethode Signatur in sehen Abbildung 1. Ein Test wird für jede [InlineData]-auf eine Methode Attribut, und die Ergebnisse der einzelnen Tests im Visual Studio -Text-Explorer zeigen laufen, siehe Abbildung 2.

die VerifyCustomerStatus Testmethode mit vier Datenpunkte im Test-Explorer
Abbildung 2 die VerifyCustomerStatus Testmethode mit vier Datenpunkte im Test-Explorer

Sie können ein Kontextmenü auf Tests im Test-Explorer jederzeit zeigen die Optionen ausführen, Debuggen, analysieren, Profil und so weiter. Jeder Änderung Code oder Prüfungen müssen Sie kompilieren und führen Sie die Tests. Sie können die Option Tests automatisch auf jedem Build ausgeführt wird im Visual Studio -Test-Menü festlegen, Test Einstellung, wählen Sie dann führen Sie Tests nach zu bauen.

Kommst du nicht weit mit Unit-Tests bevor Sie stoßen auf die Notwendigkeit der mock-Objekte. In der Regel, wenn Sie versuchen, eine Datenbank zu testen, nicht die aktuellen live-Daten ändern möchten. Daher können Sie spöttisch als eine Möglichkeit, die aktuelle Datenbank zu simulieren, Web-Service oder Business-Objekt. Karrikatur vom Geltungsbereich dieses Artikels ist, also, wenn Sie an diesen Punkt gelangen, suchen Sie im Web nach Moq, Telerik JustMock oder Rhino Mocks. Alle sind beliebte Karrikatur Softwaretitel mit vollständiger Dokumentation und Support.

Testen von Client-Side JavaScript mit qUnit

QUnit ist eine Client-seitige JavaScript-Test-Framework. Es ist leicht, einfach und einfach zu bedienen. QUnit können Sie um keine JavaScript oder jQuery zu testen. Da Sie mit Client-seitige JavaScript zu tun haben, kann sein Aktivität in der Benutzeroberfläche vor sich geht, brauchen Sie nicht zu testen. Sie können Aspekte wie Link schwebt oder Änderungen an ästhetischen Benutzeroberfläche überspringen. Sie können auch UI-Automatisierung-Tests, um UI-Tests decken. Ihre Geschäftsregeln, die API-Code und die serverseitige Validierung müssen alle gute Deckung haben. JavaScript, die Logik und Validierung ausführt braucht testen, wie gut.

Im Gegensatz zu den kompilierten Sprache-Tests, die direkt mit Visual Studiozu integrieren, müssen Sie Ihre Testumgebung qUnit zu bauen. Es ist zwar ziemlich einfach, und dauert etwa 17 Zeilen Code, die Sie, von kopieren können Abbildung 3.

Abbildung 3 die qUnit HTML-Testumgebung

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Qunit Unit Testing</title>
  <link href="Content/qunit.css" rel="stylesheet" />
</head>
<body>
  <h1 id="qunit-header">QUnit Test Suite</h1>
  <h2 id="qunit-banner"></h2>
  <div id="qunit-testrunner-toolbar"></div>
  <h2 id="qunit-userAgent"></h2>
  <ol id="qunit-tests"></ol>
  <script src="Scripts/qunit.js"></script>      
  <script src="Scripts/logic.js"></script>
  <script src="Scripts/tests.js"></script>   
</body>
</html>

Abbildung 3 zeigt Referenzen zu qunit.css, dann qunit.js, logic.js und tests.js. Die Reihenfolge ist wichtig. Sie müssen qunit.js laden, bevor Ihre Logik und Ihre Logik vor den Tests. Nennen Sie uns logic.js was du willst, wie es Ihren eigenen Code. Möglicherweise gibt es mehrere JS-Dateien zwischen qunit.js und die Tests. Die HTML-Struktur der Kabelbaum Seite enthält ein paar Überschriften-Tags, sowie eine geordnete Liste, die die einzelnen Test-Ergebnisse anzeigt. Alle Stile für diese sind in der qunit.css-Datei. Als bewährte Methode, setzen nur die JavaScript-Verweise am Ende der Web-Seite unmittelbar vor dem schließenden < / body > zu kennzeichnen, wie in Abbildung 3.

Um mit qUnit zu testen, können Tests in einer js-Datei und nennen Sie es tests.js. Hier gibt es ein Aufruf der qUnit-Test-Funktion, die den Namen der Funktion aufrufen, akzeptiert, und eine anonyme Funktion, die eigentlich den Test durchführt. Der Name an die Testfunktion übergebene zeigt sich als Namen für den Test in der Test-Runner, siehe Abbildung 4. Statt Parameter übergeben zu testen, verwenden Sie die dynamische Natur von JavaScript zum Aufrufen des Codes in Frage, mehrere Male mit mehreren behauptet. Abbildung 5 zeigt die Ausgabe mehrerer in der VerifyCustomerStatus behauptet-Testfunktion.

Abbildung 4 QUnit-Tests, die GetCurrentStatus-Funktion und die Logik selbst in JavaScript

// Tests to test customer statuses
test('VerifyCustomerStatus', function () {
  var silver = getCurrentStatus(1001);
  equals(silver, "Silver", "Pass");
  var gold = getCurrentStatus(5001);
  equals(gold, "Gold", "Pass");
  var platinum = getCurrentStatus(10001);
  equals(platinum, "Platinum", "Pass");
})
// Logic to set customer statuses
function getCurrentStatus(amt) {
  if (amt > 1000 && amt <= 5000) { return "Silver"; }
  else if (amt > 5000 && amt <= 10000) { return "Gold"; }
  else if (amt > 10000) { return "Platinum"; }
  return "None";
}

Ergebnisse qUnit Tests im Browser
Abbildung 5 Ergebnisse qUnit Tests im Browser

Wenn Sie Windows Store oder Windows Phone-apps, die Verwendung der Windows-Library für JavaScript (WinJS) schreiben, keine Angst. Gibt es eine qUnitMetro, Sie können bei bit.ly/1F2RsO7. Dieses Paket ermöglicht qUnit im app Store Container zu führen, so wie es auf einer Webseite. Die Kodierung und die Möglichkeit, das Schreiben von Tests entsprechen qUnit, weil es sich tatsächlich um qUnit handelt.

Testen der Benutzeroberflächenautomatisierungs mit CUITs

Wenn Sie Tests für native UIs automatisieren müssen, wenden Sie sich an CUITs. CUITs scheinen ein wenig bekannte Test-Feature in Visual Studiozu sein. Sie können CUITs in Visual Studio für Web, Windows Speicher und Windows Phone apps erstellen. Visual Studio CUITs können Benutzeroberfläche unter Windows testen. Sie brauchen noch nicht einmal den Quellcode, eine Benutzeroberfläche zu testen. Sie können die Tests jedes ausgeführte Programm deiner Wahl konfigurieren.

Gibt es Visual Studio -Vorlagen für Ihr Basisprogramm UIs — Web, Windows Speicher und Windows Phone. Wenn Sie ein Projekt aus einer dieser Vorlagen erstellen, Visual Studio startet Sie direkt in die erste Dialogfenster angezeigt, Abbildung 6, gefragt, ob Sie möchten neue Tests erfassen oder bearbeiten bestehende. Wählen Sie "Aktionen aufzeichnen, Bearbeiten der UI-Zuordnung oder Assertionen hinzufügen", und ein Toolfenster erscheint (siehe Abbildung 7). Diese gleiche Dialogfeld und Tool-Fenster wird angezeigt, jedes Mal, wenn Sie einem Projekt eine neue CUIT-Datei hinzufügen (Datei | Neues Element). An dieser Stelle können Sie klicken Sie auf Aufnahme und starten Sie dann die Interaktion mit Ihrer Web-Seite oder die app UI.

die Dialogfeld Visual Studio Displays zum aufnehmen oder Bearbeiten von codierten UI-Tests
Abbildung 6 die Dialogfeld Visual Studio Displays zum aufnehmen oder Bearbeiten von codierten UI-Tests

das Tool zum Aufzeichnen und Bearbeiten von Behauptungen
Abbildung 7 das Tool zum Aufzeichnen und Bearbeiten von Behauptungen

Wenn Sie fertig sind, klicken Sie hinzufügen und generieren auf den unteren Rand des Fensters (siehe Abbildung 8), detaillierte und beschreibenden Metadaten hinzufügen und Visual Studio den Code generieren lassen.

Dialoge, dass erstellen Coded UI tests
Abbildung 8 Dialoge, dass erstellen Coded UI tests

Wenn Sie ein Coded UI-Projekt erstellen und Hinzufügen einer codierten UI-Test, Visual Studio generiert eine Menge Code. Visual Studio ist jedoch schlau darüber, wie es den Testcode generiert. Die Ausgabe ist sauber, vor allem für den generierten Code. Visual Studio generiert den Code durch Ihre Aktionen aufzeichnen, während Sie mit einem bestimmten Programm. Wenn Sie auf der Toolbox in klicken Abbildung 7, der Recorder verfolgt, was Sie tun, um Code zu generieren, die die gleiche Aktion ausführt. Du bist frei, diesen Code zu schreiben, aber es ist einfacher, es generiert haben.

Sobald Sie fertig sind mit der codierten UI-Test Generator, Visual Studio erstellt ein paar Dateien, wobei die erste Coded UI test. Dies ist eine CS-Datei und enthält eine Klasse mit Methoden, die die gleichen Schritte ausführen, die ein Benutzer verwenden Sie eine Benutzeroberfläche mitnehmen würde. Die anderen Dateien sind Map-Dateien: UIMap.uitest, UIMap.cs und UIMap.designer.cs. Im Gegensatz zu traditionellen Visual Studio -Designer, die zum Generieren von zu viel Code dafür berüchtigt sind, verhält sich diese viel besser. Es ist leicht, Tests ohne die Designer immer auf Ihre Art und Weise zu ändern. Jederzeit können Sie den Designer ändern, durch Rechtsklick auf die .uitest-Datei und bearbeiten mit codierten UI-Test-Generator aus den Optionen auswählen. Dies startet die Toolbox, die Sie gesehen, in haben Abbildung 7. Du bist wieder frei, Ihre eigenen Tests manuell zu schreiben. Werfen Sie vor der Entscheidung einen Blick auf einige der den generierten Code, der diese vier Tests durchführt:

  1. Es testet, erstellen einen neuen Kunden richtig
  2. Es testet, erstellen einen neuen Kunden ohne einen Namen einzugeben
  3. Es testet, erstellen einen neuen Kunden ohne Eingabe einer Adresse
  4. Es testet, erstellen einen neuen Kunden durch Eingabe eine ungültige Postleitzahl-format

Die vier Tests finden Sie in der Designerdatei, und Code in der Coded UI Testklasse nennt sie in Folge, wie Sie, in sehen können Abbildung 9.

Abbildung 9 Teilinhalten der codierten UI-Test und Map-Designer-Dateien

// In the Coded UI Test C# file
[CodedUITest]
  public class CodedUITest1
  {
    [TestMethod]
    public void CodedUITestMethod1()
    {
      this.UIMap.CreateNewCustomerCorrectly();
      this.UIMap.CreateNewCustomerWithoutName();
      this.UIMap.CreateNewCustomerWithoutAddress();
      this.UIMap.CreateNewCustomerWihtoutValidPostalCode();       
    }
    // Some other framework code for Coded UI
  }
// In the Coded UI UIMap.Designer.cs file
public void CreateNewCustomerWithoutName()
    {
      #region Variable Declarations
      // Click 'Create New' link
      Mouse.Click(uICreateNewHyperlink, new Point(51, 8));
      // Type '' in 'Name' text box
      uINameEdit.Text = this.CreateNewCustomerMissingNameParams.UINameEditText;
      // Type '{Tab}' in 'Name' text box
      Keyboard.SendKeys(uINameEdit,
        this.CreateNewCustomerMissingNameParams.UINameEditSendKeys,
        ModifierKeys.None);
      // Type '234 Lane St' in 'Address' text box
      uIAddressEdit.Text =
        this.CreateNewCustomerMissingNameParams.UIAddressEditText;
      // Type '{Tab}' in 'Address' text box
      Keyboard.SendKeys(uIAddressEdit,
        this.CreateNewCustomerMissingNameParams.UIAddressEditSendKeys,
        ModifierKeys.None);
  }
}

Codierten UI-Tests sind genau wie alle anderen zu testen. Sie sind für die Interaktion mit der Benutzeroberfläche, wie ein Benutzer. Glücklicherweise ist das Coded UI-Tool für Ihre Aktionen aufzeichnen und Generieren von Code, der das gleiche tut. Jederzeit können Sie verwerfen und regenerieren die Tests oder ändern Sie den Code ohne Sorge. Wie Komponententests, können Sie auch die Coded UI Tests Visual\ Explorer von Visual Studio ausführen. Sie zeigen neben den Unit-Tests.

Verbesserung der Qualität Ihrer Software

Es gibt echte Vorteile aus den verschiedenen Formen der Prüfung. Es ist wichtig, auch kleine Windows Store oder Windows Phone apps, zu testen, vor allem, wenn Sie sie in ein app Store verkaufen. Getestete apps sind Anwendungen, die zuverlässig funktionieren – sie haben Dokumentation und einen Audit-Trail.

Sie können Komponententests mit Bibliotheken wie xUnit und qUnit und Verwenden von Automatisierung für Web oder native apps mit CUITs testen. Das ist um ganz zu schweigen von anderen Arten von wichtigen Tests wie Benutzerakzeptanz testen, Integrationstests, Systemtests und so weiter. Diese hinzufügen, sobald Sie einen festen Satz von Einheit und UI haben werden Tests erheblich verbessern die Qualität Ihrer Software.


Rachel Appel ist Beraterin, Autorin, Mentorin und frühere Microsoft-Mitarbeiterin mit über zwanzigjähriger Erfahrung in der IT-Branche. Sie nimmt an wichtigen Branchenkonferenzen wie Visual Studio Live!, DevConnections und MIX als Rednerin teil. Ihr Fachbereich ist die Entwicklung von Lösungen, bei denen geschäftliche und technologische Aspekte in Einklang gebracht werden und in denen führende Microsoft- und offene Webtechnologien zum Einsatz kommen. Besuchen Sie Rachel Appel auf ihrer Website unter rachelappel.com.

Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Oren Novotony