In TDD gibt es die Arrange Act Assert (AAA) -Syntax:
[Test]
public void Test_ReturnItemForRefund_ReturnsStockOfBlackSweatersAsTwo_WhenOneInStockAndOneIsReturned()
{
//Arrange
ShopStock shopStock = new ShopStock();
Item blackSweater = new Item("ID: 25");
shopStock.AddStock(blackSweater);
int expectedResult = 2;
Item blackSweaterToReturn = new Item("ID: 25");
//Act
shopStock.ReturnItemForRefund(blackSweaterToReturn);
int actualResult = shopStock.GetStock("ID: 25");
//Assert
Assert.AreEqual(expectedResult, actualResult);
}
Bei BDD-Schreibtests wird eine ähnliche Struktur verwendet, jedoch mit der GWT-Syntax (Given When Then):
[Given(@"a customer previously bought a black sweater from me")]
public void GivenACustomerPreviouslyBoughtABlackSweaterFromMe()
{ /* Code goes here */ }
[Given(@"I currently have three black sweaters left in stock")]
public void GivenICurrentlyHaveThreeBlackSweatersLeftInStock()
{ /* Code goes here */ }
[When(@"he returns the sweater for a refund")]
public void WhenHeReturnsTheSweaterForARefund()
{ /* Code goes here */ }
[Then(@"I should have four black sweaters in stock")]
public void ThenIShouldHaveFourBlackSweatersInStock()
{ /* Code goes here */ }
Obwohl sie oft als gleich angesehen werden, gibt es Unterschiede. Einige Schlüssel sind:
GWT kann direkt auf die Spezifikation einer Feature-Datei in BDD-Frameworks abgebildet werden
GWT ist für Nicht-Entwickler einfacher zu verstehen, wenn die Verwendung von einfachem Englisch gefördert wird und eine kurze Beschreibung der einzelnen Teile vorliegt
Given When und Then sind Schlüsselwörter in verschiedenen BDD-Frameworks wie SpecFlow und Cucumber
Meine Frage ist, gibt es andere Unterschiede (außer den Namen) zwischen AAA und GWT? Und gibt es außer den oben genannten noch einen Grund, warum das eine dem anderen vorgezogen werden sollte?
quelle
Antworten:
Ich denke, Sie haben die Unterschiede in Ihrer Frage sehr gut aufgelistet, aber ich werde einige meiner Meinungen dazu hinzufügen, wie ich die beiden Ansätze betrachte.
AAA ist sehr nützlich für mich, wenn ich meinen eigenen Code teste. Wenn ich für mich an einem Projekt oder einer Bibliothek arbeite, bin AAA der Weg, den ich gehe. Damit kann ich alles einrichten, was ich brauche, um meinen Test auszuführen, und ihn dann einfach testen . Es ist schnell einzurichten und schnell zu überprüfen, ob mein Code wie erwartet funktioniert.
GWT ist in Geschäftsumgebungen nützlich, in denen die Arbeit von Programmierern auf den Geschäftswert abgebildet werden muss. Der geschäftliche Nutzen wird durch Funktionen abgebildet, und hoffentlich durch Funktionen, die keine Fehler verursachen. Es gibt viele Strategien zum Zuordnen von Funktionen zu Programmieraufgaben, eine davon sind die Anforderungen. Nach meiner Erfahrung reichen die Anforderungen von Anforderungen auf Benutzerebene bis hin zu kleinen Aufgaben, die der Benutzer ausführen muss. Dies ist nützlich, weil die Manager leicht verstehen können, wie sich die Arbeit des Programmierers auf ihre Kunden / Benutzer auswirkt und warum die Programmierer einen Mehrwert für ihr Geschäft schaffen
Diese Art von Anforderungsstruktur ermöglicht ein baumartiges Design, bei dem alle Anforderungen auf Programmiererebene den Baum den Anforderungen auf Benutzerebene zuordnen. Wenn eine Anforderung auf Programmiererebene fehlschlägt, wissen Sie auf diese Weise, welche Anforderung auf Benutzerebene betroffen ist.
Im Gegensatz dazu könnte ein AAA-Test so aussehen. Das ist für mich sehr programmierorientiert und für das Geschäft nicht nützlich. Das heißt nicht, dass mit einer AAA-Teststrategie keine ähnliche Baumstruktur von Anforderungen erstellt werden kann, aber nichts in der Sprache von AAA macht es einfacher, dies zu tun.
quelle
Ich denke, es hängt von dem Framework ab, das Sie verwenden. Nach meinem Verständnis wird AAA im Allgemeinen vom NUnit-Framework unterstützt und ist daher die natürliche Wahl in dieser Hinsicht. Die theoretischen Unterschiede zwischen TDD und BDD scheinen gering zu sein. Sehen Sie diesen Link, jemand, der besser als ich ist, um Ihnen eine Erklärung zu geben.
quelle
Es gibt überhaupt keinen Unterschied.
Drei Testzustände :
Gegeben = Anordnen,
Wann
= Handeln , Dann = Bestätigen.
Unterschiede, die Sie in der Frage angegeben haben, sind Unterschiede zwischen TDD und BDD und nicht zwischen GWT und AAA.
In TDD können Sie drei verschiedene Methoden für einen Test haben
quelle