Dans TDD, il existe une syntaxe 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);
}
Dans BDD, les tests d'écriture utilisent une structure similaire mais avec la syntaxe 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 */ }
Bien qu'ils soient souvent considérés comme identiques, il existe des différences. En voici quelques-uns:
GWT peut être mappé directement à la spécification d'un fichier d'entités dans les cadres BDD
GWT est plus facile à comprendre pour les non-développeurs en encourageant l'utilisation d'un anglais simple et en ayant une courte description de ce que fait chaque partie.
Étant donné quand et alors sont des mots clés dans divers cadres BDD tels que SpecFlow et Cucumber
Ma question est la suivante: existe-t-il d'autres différences (outre les noms) entre AAA et GWT? Et y a-t-il une raison, outre celles spécifiées ci-dessus, que l'une devrait être préférée à l'autre?