In TDD c'è la sintassi Arrange Act Assert (AAA):
[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);
}
Nei test di scrittura BDD utilizza una struttura simile ma con la sintassi Given When Then (GWT):
[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 */ }
Sebbene siano spesso considerati uguali, ci sono differenze. Alcuni di quelli chiave sono:
-
GWT può essere mappato direttamente alle specifiche di un file di feature in framework BDD
-
GWT è più facile da comprendere per i non sviluppatori incoraggiando l'uso dell'inglese semplice e una breve descrizione di ciò che ogni parte sta facendo
-
Dato When e Then sono parole chiave in vari framework BDD come SpecFlow e Cucumber
La mia domanda è: ci sono altre differenze (oltre ai nomi) tra AAA e GWT? E c'è qualche motivo oltre a quelli sopra specificati che uno dovrebbe essere preferito rispetto all'altro?