Di TDD ada sintaks 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);
}
Dalam tes menulis BDD menggunakan struktur yang sama tetapi dengan sintaks 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 */ }
Meskipun mereka sering dianggap sama ada perbedaan. Beberapa yang penting adalah:
GWT dapat dipetakan langsung ke spesifikasi file fitur dalam kerangka BDD
GWT lebih mudah dipahami oleh non-pengembang dengan mendorong penggunaan bahasa Inggris yang sederhana, dan memiliki deskripsi singkat tentang apa yang dilakukan setiap bagian
Diberi Kapan dan Lalu adalah kata kunci dalam berbagai kerangka kerja BDD seperti SpecFlow, dan Mentimun
Pertanyaan saya, adakah perbedaan lain (selain nama) antara AAA dan GWT? Dan adakah alasan selain yang ditentukan di atas bahwa yang satu lebih disukai daripada yang lain?
c#
unit-testing
tdd
bdd
Cognitive_chaos
sumber
sumber
Jawaban:
Saya pikir Anda mencantumkan perbedaan dengan sangat baik dalam pertanyaan Anda, namun saya akan menambahkan beberapa pendapat saya tentang bagaimana saya melihat kedua pendekatan tersebut.
AAA sangat berguna bagi saya ketika saya menguji kode saya sendiri. Jika saya mengerjakan proyek atau perpustakaan untuk diri saya sendiri, AAA adalah cara saya melakukannya. Ini memungkinkan saya mengatur apa pun yang saya butuhkan untuk menjalankan tes saya dan kemudian hanya mengujinya . Ini cepat untuk setup, dan cepat untuk memverifikasi bahwa kode saya berfungsi seperti yang saya harapkan.
GWT berguna dalam lingkungan bisnis, di mana pekerjaan yang dilakukan oleh pemrogram perlu dipetakan ke nilai bisnis. Nilai bisnis dipetakan oleh fitur, dan semoga fitur yang tidak memperkenalkan bug. Ada banyak strategi untuk memetakan fitur untuk tugas pemrograman, tetapi salah satunya adalah melalui persyaratan. Dalam pengalaman saya, persyaratan berkisar dari persyaratan tingkat pengguna sampai ke tugas-tugas kecil untuk dieksekusi pengguna. Ini berguna karena mudah bagi para manajer untuk memahami bagaimana pekerjaan yang dilakukan oleh programmer mempengaruhi pelanggan / pengguna mereka, dan oleh karena itu mengapa programmer menambahkan nilai pada bisnis mereka.
Struktur persyaratan semacam ini memungkinkan desain seperti pohon tempat semua Persyaratan Tingkat Programmer memetakan pohon ke Persyaratan Tingkat Pengguna. Dengan cara ini, ketika Persyaratan Tingkat Programmer gagal maka Anda tahu Persyaratan Tingkat Pengguna mana yang terpengaruh.
Sebaliknya, tes AAA mungkin terlihat seperti ini. Bagi saya ini sangat menghadap programmer dan tidak berguna untuk bisnis. Itu tidak berarti struktur pohon persyaratan yang serupa tidak dapat dibuat dari strategi pengujian AAA, tetapi tidak ada dalam bahasa AAA yang membuatnya lebih mudah untuk melakukannya.
sumber
Saya kira itu tergantung pada kerangka yang Anda gunakan. Secara umum, sejauh pemahaman saya, AAA didukung oleh kerangka kerja NUnit, dan dengan demikian adalah pilihan alami dalam hal itu. Adapun perbedaan teoritis antara TDD dan BDD, mereka tampaknya sedikit. Lihat tautan ini , seseorang yang lebih berkualifikasi dari saya untuk memberi Anda penjelasan.
sumber
Tidak ada perbedaan sama sekali.
Tiga kondisi pengujian:
Diberikan = Atur,
Kapan = Bertindak,
Kemudian = Tegas.
Perbedaan yang Anda berikan dalam pertanyaan adalah perbedaan antara TDD dan BDD dan bukan GWT dan AAA.
Dalam TDD Anda dapat memiliki tiga metode berbeda untuk satu tes
sumber