TDDには、アレンジアサート(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の記述テストでは、同様の構造を使用しますが、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 */ }
多くの場合、同じものと見なされますが、違いがあります。主なものは次のとおりです。
GWTは、BDDフレームワークの機能ファイルの仕様に直接マッピングできます。
GWTは、単純な英語の使用を奨励し、各パートが何をしているのかを簡単に説明することで、開発者以外の人でも理解しやすくなります。
SpecFlowやCucumberなど、さまざまなBDDフレームワークのキーワードがWhenおよびThenである場合
私の質問は、AAAとGWTの間に(名前以外に)他の違いはありますか?そして、上記で指定されたもの以外に、一方が他方よりも優先されるべき理由はありますか?