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?