ใน TDD มีไวยากรณ์จัดเรียง 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);
}
ในการทดสอบการเขียน BDD ใช้โครงสร้างที่คล้ายกัน แต่มีไวยากรณ์เมื่อเมื่อ (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 */ }
แม้ว่าพวกเขามักจะถือว่าเหมือนกันมีความแตกต่าง กุญแจสำคัญไม่กี่:
GWT สามารถแมปโดยตรงกับข้อมูลจำเพาะของไฟล์คุณสมบัติในกรอบงานของ BDD
GWT ง่ายขึ้นสำหรับผู้ที่ไม่ใช่นักพัฒนาที่จะเข้าใจโดยการส่งเสริมการใช้ภาษาอังกฤษธรรมดาและมีคำอธิบายสั้น ๆ ว่าแต่ละส่วนทำอะไร
ได้รับเมื่อและจากนั้นเป็นคำหลักในกรอบ BDD ต่างๆเช่น SpecFlow และแตงกวา
คำถามของฉันมีความแตกต่างอื่น ๆ (นอกเหนือจากชื่อ) ระหว่าง AAA และ GWT หรือไม่? และมีเหตุผลใดนอกเหนือจากที่ระบุไว้ข้างต้นว่าควรจะชอบมากกว่าที่อื่น ๆ ?