En TDD hay una sintaxis de 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);
}
En BDD, las pruebas de escritura usan una estructura similar pero con la sintaxis 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 */ }
Aunque a menudo se consideran iguales, hay diferencias. Algunas claves son:
GWT se puede asignar directamente a la especificación de un archivo de características en marcos BDD
GWT es más fácil de entender para los no desarrolladores al fomentar el uso del inglés simple y al tener una breve descripción de lo que está haciendo cada parte
Dado cuándo y luego son palabras clave en varios marcos de BDD como SpecFlow y Cucumber
Mi pregunta es ¿hay alguna otra diferencia (además de los nombres) entre AAA y GWT? ¿Y hay alguna razón, además de las especificadas anteriormente, de que una debería preferirse sobre la otra?