Ein Tag im Leben eines ALM-Entwicklers: Schreiben von Code für eine User Story
Die Story bis jetzt
Übersicht über dieses Kapitels
Hinweis
|
|---|
|
|
In diesem Thema
So persönlichen Rückstand überprüfen und Aufgaben vorbereiten, Arbeit zu starten
-
In Team Explorer: -
Wenn Sie nicht bereits über eine Verbindung mit dem Teamprojekt verfügen, in dem Sie arbeiten möchten, stellen Sie eine Verbindung mit dem Teamprojekt her. -
Wählen Sie Startseite aus und wählen dann Meine Arbeit aus.
-
-
Klicken Sie auf der Seite Meine Arbeit ziehen Sie die Aufgabe aus der Liste Verfügbare Arbeitsaufgaben zum Laufende Arbeitsaufgaben-Abschnitt. Sie können eine Aufgabe in der Liste Verfügbare Arbeitsaufgaben auch auswählen und Start auswählen.
Entwurfs-inkrementeller Arbeitsplan
-
Erstellen Sie Testmethode, Stub-dass ist, nur die Signatur der Methode zu. -
Erstellen Sie einen typischen Fall der spezifischen erfüllt. -
Testen Sie eine Reihe. Stellen Sie sicher, dass der Code ordnungsgemäß auf einen großen Wertebereich reagiert. -
Ausnahme auf null. Daten ordnungsgemäß mit falschen Parameter. -
Codeabdeckung. Stellen Sie sicher, dass mindestens 80% des Codes durch Komponententests ausgeführt wird.
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Fabrikam.Math.UnitTest { [TestClass] public class UnitTest1 { [TestMethod] // Demonstrates how to call the method. public void SignatureTest() { // Create an instance: var math = new Fabrikam.Math.LocalMath(); // Get a value to calculate: double input = 0.0; // Call the method: double actualResult = math.SquareRoot(input); // Use the result: Assert.AreEqual(0.0, actualResult); } } }
So fügen Sie ein Komponententestprojekt und Methoden erstellen
Erstellen Sie ein Testprojekt, falls nicht vorhanden. Im Dialogfeld Neues Projekt wählen Sie eine Sprache wie Visual Basic, Visual C++ oder Visual C# aus. Wählen Sie Test und dann Komponententestprojekt aus.
Fügen Sie die Tests der Testklasse hinzu, die bereitgestellt wird. Jeder Komponententest ist eine Methode. Jeder Komponententest muss vom TestMethod-Attribut vorangestellt wird, und die Komponententestmethode sollte keine Parameter haben. Sie können einen beliebigen Namen verwenden, den Sie für eine Komponententestmethode möchten: Jede Testmethode sollte eine Methode der Klasse aufrufen Assert um anzugeben, ob sie erfolgreich oder fehlerhaft ist. In der Regel stellen Sie sicher, dass die erwarteten und tatsächlichen Ergebnisse eines Vorgangs gleich sind: Testmethoden können andere gewöhnliche Methoden aufrufen, die TestMethod nicht das Attribut verfügen. Sie können die Tests in mehr als eine Klasse organisieren. Jede Klasse muss vom TestClass-Attribut vorangestellt wird.
public double SquareRoot(double p)
{
throw new NotImplementedException();
}
Wenn Sie Klassen und Methoden von Tests generieren
Um eine Klasse generieren
Platzieren Sie den Cursor in einem Beispiel der Klasse, die Sie beispielsweise LocalMath generieren möchten. Klicken Sie im Kontextmenü wählen Sie Code generieren, Neuer Typ aus. Im Dialogfeld Neuer Typ legen Sie Projekt auf das Klassenbibliotheksprojekt fest. In diesem Beispiel ist es Fabrikam.Math.
So fügen Sie eine Methode generieren
Platzieren Sie den Cursor in einem Aufruf der Methode beispielsweise SquareRoot. Klicken Sie im Kontextmenü wählen Sie Code generieren, Methodenstub aus.
public double SquareRoot(double p)
{
return 0.0;
}

Um den Komponententests

Klicken Sie im Menü Test wählen Sie Ausführen, Alle Tests aus. - oder - Wenn Test-Explorer geöffnet ist, wählen Sie Alle ausführen aus. - oder - Platzieren Sie den Cursor in einer Testcodedatei und in einer STRG+R, T drücken. Wenn ein Test mit Fehlgeschlagene Tests angezeigt: Öffnen Sie den Test indem Sie beispielsweise auf den Namen doppelklicken. Der Punkt, an dem der Test fehlgeschlagen ist, wird angezeigt.
[TestMethod]
public void QuickNonZero()
{
// Create an instance to test:
LocalMath math = new LocalMath();
// Create a test input and expected value:
var expectedResult = 4.0;
var inputValue = expectedResult * expectedResult;
// Run the method:
var actualResult = math.SquareRoot(inputValue);
// Validate the result:
var allowableError = expectedResult/1e6;
Assert.AreEqual(expectedResult, actualResult, allowableError,
"{0} is not within {1} of {2}", actualResult, allowableError, expectedResult);
}
Tipp |
|---|
Rot
Grün
public class LocalMath
{
public double SquareRoot(double x)
{
double estimate = x;
double previousEstimate = -x;
while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000)
{
previousEstimate = estimate;
estimate = (estimate * estimate - x) / (2 * estimate);
}
return estimate;
}

Umgestaltung
public class LocalMath
{
public double SquareRoot(double x)
{
double estimate = x;
double previousEstimate = -x;
while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000)
{
previousEstimate = estimate;
estimate = (estimate + x / estimate) / 2;
//was: estimate = (estimate * estimate - x) / (2 * estimate);
}
return estimate;
}

Tipp |
|---|
|
... und Wiederholung
[TestMethod]
public void SqRtValueRange()
{
LocalMath math = new LocalMath();
for (double expectedResult = 1e-8;
expectedResult < 1e+8;
expectedResult = expectedResult * 3.2)
{
VerifyOneRootValue(math, expectedResult);
}
}
private void VerifyOneRootValue(LocalMath math, double expectedResult)
{
double input = expectedResult * expectedResult;
double actualResult = math.SquareRoot(input);
Assert.AreEqual(expectedResult, actualResult, expectedResult / 1e6);
}

Tipp |
|---|
Ausnahmen
[TestMethod]
public void RootTestNegativeInput()
{
LocalMath math = new LocalMath();
try
{
math.SquareRoot(-10.0);
}
catch (ArgumentOutOfRangeException)
{
return;
}
catch
{
Assert.Fail("Wrong exception on negative input");
return;
}
Assert.Fail("No exception on negative input");
}
[TestMethod, Timeout(1000)]
public void RootTestNegativeInput()
{...
public double SquareRoot(double x)
{
if (x <= 0.0)
{
throw new ArgumentOutOfRangeException();
}
Regression
public double SquareRoot(double x)
{
if (x < 0.0) // not <=
{
throw new ArgumentOutOfRangeException();
}

Tipp |
|---|
-
Die gesamte verfügbare Komponententests bestanden. In einem Projekt mit einem sehr großen Satz von Komponententests, kann es für einen Entwickler nicht möglich sein, alle darauf zu warten, um ausgeführt zu werden. Stattdessen wird das Projekt einen Dienst für abgegrenzte Eincheckvorgänge, in der alle automatisierten Tests für jedes eingecheckte Shelveset ausgeführt werden, bevor es in die Zielstruktur zusammengeführt wird. Das Einchecken wird abgelehnt, wenn die Ausführung fehlschlägt. Dies ermöglicht es dem Entwickler, um einen minimalen Satz von Komponententests auf dem eigenen Computer ausführen und anschließend mit anderer Aufgaben fortfahren, ohne das Risiko des Anwendungsverhalten des Builds auszuführen. Weitere Informationen finden Sie unter Definieren eines abgegrenzten Eincheckbuildprozesses zur Überprüfung der Änderungen. -
Codeabdeckung entspricht dem Standard des Teams. 75% ist eine typische Projektanforderung. -
Die Komponententests simulieren jeden Aspekt des Verhaltens, das erforderlich ist, einschließlich der typischen und Ausnahmen Eingaben. -
Der Code ist einfach zu verstehen und zu erweitern.
Prinzipien der Codeentwicklung mit Komponententests
-
Entwickeln Sie Komponententests gemeinsam mit dem Code, und führen Sie sie während der Entwicklung häufig aus. Die Komponententests stellen die Spezifikation der Komponente dar. -
Nicht Änderungseinheitentests ausführen, es sei denn, die Anforderungen geändert haben, oder die Tests falsch waren. Fügen Sie neue Tests allmählich hinzu, wie Sie die Funktionalität des Codes erweitern. -
Streben von mindestens 75% des an die Tests abgedeckt werden Code. Betrachten Sie die Codeabdeckungsergebnisse in Abständen und bevor Sie in Quellcode überprüfen. -
Überprüfen Sie die Komponententests gemeinsam mit dem Code, damit sie in die fortlaufende oder regulären Serverbuilder ausgeführt werden. -
Wo möglich, für jedes Funktion, schreiben Sie den Komponententest zuerst. Wählen Sie dazu, bevor Sie den Code entwickeln, der es erfüllt.
So machen Sie die Änderungen einchecken
-
Wählen Sie in der Menüleiste die Optionen Ansicht und Team Explorer aus. -
In Team Explorer wählen Sie Startseite aus und wählen dann Meine Arbeit aus. -
Klicken Sie auf der Seite Meine Arbeit wählen Sie Einchecken aus. -
Überprüfen Sie den Inhalt der Seite Ausstehende Änderungen, um sicherzustellen, dass: -
Alle relevanten Änderungen werden in Eingeschlossene Änderungen aufgeführt -
Alle relevanten Arbeitsaufgaben werden in Verknüpfte Arbeitsaufgaben aufgeführt.
-
-
Geben Sie Kommentar an, die das Team helfen, den Zweck dieser Änderungen zu verstehen, wenn sie den Versionskontrollverlauf der geänderten Dateien und Ordner berücksichtigen. -
Wählen Sie Einchecken aus.
So fügen Sie den Code fortlaufend integrieren
Hinweis