W TDD istnieje składnia 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);
}
W testach BDD pisanie używa podobnej struktury, ale ze składnią 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 */ }
Chociaż często uważa się je za takie same, istnieją różnice. Kilka kluczowych to:
GWT można odwzorować bezpośrednio na specyfikację pliku funkcji w ramach BDD
GWT jest łatwiejszy do zrozumienia dla osób, które nie są programistami, zachęcając do używania zwykłego angielskiego i krótko opisując, co robi każda część
Podane kiedy i kiedy to słowa kluczowe w różnych ramach BDD, takich jak SpecFlow i Cucumber
Moje pytanie: czy są jakieś inne różnice (oprócz nazw) między AAA i GWT? Czy jest jakiś powód poza wymienionymi powyżej, że jeden powinien być preferowany nad drugim?
c#
unit-testing
tdd
bdd
Chaos poznawczy
źródło
źródło
Odpowiedzi:
Myślę, że bardzo dobrze wymieniłeś różnice w swoim pytaniu, jednak dodam kilka moich opinii na temat tego, jak postrzegam oba podejścia.
AAA jest dla mnie bardzo przydatny podczas testowania własnego kodu. Jeśli pracuję nad projektem lub biblioteką dla siebie, AAA jest właściwą drogą. Pozwala mi skonfigurować wszystko, co potrzebne do wykonania testu, a następnie po prostu przetestować . Szybko go konfiguruję i szybko sprawdzam, czy mój kod działa zgodnie z oczekiwaniami.
GWT jest przydatny w środowiskach biznesowych, w których praca wykonywana przez programistów musi być odwzorowana na wartość biznesową. Wartość biznesowa jest odwzorowywana według funkcji i, mam nadzieję, funkcji, które nie wprowadzają błędów. Istnieje wiele strategii mapowania funkcji do zadań programistycznych, ale jedną z nich są wymagania. Z mojego doświadczenia wynika, że wymagania wahają się od wymagań na poziomie użytkownika aż po małe zadania do wykonania przez użytkownika. Jest to przydatne, ponieważ menedżerowie mogą łatwo zrozumieć, w jaki sposób praca programisty wpływa na ich klientów / użytkowników, a zatem dlaczego programiści wnoszą wartość dodaną do ich działalności
Ten rodzaj struktury wymagań pozwala na projektowanie drzewiaste, w którym wszystkie wymagania na poziomie programisty mapują drzewo do wymagań na poziomie użytkownika. W ten sposób, gdy nie powiedzie się wymaganie na poziomie programisty, wiadomo, na który wymóg ma wpływ poziom użytkownika.
W przeciwieństwie do tego test AAA może wyglądać tak. To jest dla mnie bardzo ważne dla programistów i nie jest przydatne dla biznesu. Nie oznacza to, że podobna struktura wymagań nie może być stworzona ze strategii testowania AAA, ale nic w języku AAA nie ułatwia tego.
źródło
Myślę, że to zależy od używanego frameworka. Ogólnie, o ile mi wiadomo, AAA jest wspierane przez ramy NUnit, a zatem jest to naturalny wybór w tym względzie. Jeśli chodzi o teoretyczne różnice między TDD i BDD, wydają się one niewielkie. Zobacz ten link, ktoś bardziej wykwalifikowany niż ja, aby dać ci wyjaśnienie.
źródło
Nie ma żadnej różnicy.
Trzy stany testu:
Biorąc pod uwagę = Rozmieść,
Kiedy = Działaj,
Następnie = Potwierdź.
Różnice, które podałeś w pytaniu, to różnice między TDD i BDD, a nie GWT i AAA.
W TDD możesz mieć trzy różne metody dla jednego testu
źródło