No TDD, há a sintaxe 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);
}
No BDD, os testes de gravação usam uma estrutura semelhante, mas com a sintaxe 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 */ }
Embora muitas vezes sejam considerados iguais, existem diferenças. Alguns dos principais são:
O GWT pode ser mapeado diretamente para a especificação de um arquivo de recurso nas estruturas BDD
O GWT é mais fácil para os não desenvolvedores entenderem, incentivando o uso de inglês simples e com uma breve descrição do que cada parte está fazendo
Dado quando e depois são palavras-chave em várias estruturas do BDD, como SpecFlow e Cucumber
Minha pergunta é: existem outras diferenças (além dos nomes) entre AAA e GWT? E há alguma razão além das especificadas acima, de que uma deve ser preferida à outra?