Trong TDD có cú pháp 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);
}
Trong các bài kiểm tra viết BDD sử dụng một cấu trúc tương tự nhưng với cú pháp Cho trước khi đó (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 */ }
Mặc dù chúng thường được coi là giống nhau nhưng có sự khác biệt. Một vài cái chính là:
GWT có thể được ánh xạ trực tiếp đến đặc điểm kỹ thuật của tệp tính năng trong các khung BDD
GWT dễ hiểu hơn đối với những người không phải là nhà phát triển bằng cách khuyến khích sử dụng tiếng Anh đơn giản và có một mô tả ngắn về những gì mỗi phần đang làm
Khi nào và sau đó là các từ khóa trong các khung BDD khác nhau như SpecFlow và Cucumber
Câu hỏi của tôi là có sự khác biệt nào khác (ngoài tên) giữa AAA và GWT không? Và có lý do nào ngoài những lý do được chỉ định ở trên mà cái này nên được ưu tiên hơn cái kia không?