Czy testy BDD są testami akceptacyjnymi?

Lub, jeśli masz testy BDD, potrzebujesz czegoś takiego jak Fitnesse?

Author: Sandbox, 2009-04-20

7 answers

BDD "testy" istnieją na wielu różnych poziomach szczegółowości, aż do początkowej wizji projektu. Większość ludzi wie o scenariuszach. Kilka osób pamięta, że BDD zaczęło się od słowa "Powinien" jako zamiennik "testu" Junita - jako zamiennik TDD. Powodem, dla którego umieszczam "testy" w cudzysłowach, jest to, że BDD nie jest tak naprawdę testowaniem; koncentruje się na znalezieniu miejsc, w których występuje brak lub niedopasowanie zrozumienia.

Z powodu tego skupienia, rozmowy są o wiele ważniejsze niż narzędzia BDD.

Powtórzę to jeszcze raz. rozmowy są o wiele ważniejsze niż narzędzia BDD.

Testy akceptacyjne w rzeczywistości nie upoważniają do rozmów i zazwyczaj działają z założenia, że testy, które piszesz, są odpowiednimi testami. W BDD Zakładamy, że nie wiemy, co robimy (i prawdopodobnie nie wiemy, że nie wiemy). Dlatego używamy takich rzeczy jak "Given, When, Then" - aby może prowadzić rozmowy na temat scenariuszy i / lub przykładów na poziomie jednostki. (Są to dwa poziomy, które większość ludzi zna - odpowiednik testów akceptacyjnych i testów jednostkowych - ale rośnie skala).

Nie nazywamy ich "testami akceptacyjnymi", ponieważ nie możesz poprosić osoby biznesowej "proszę pomóż mi z moim testem akceptacyjnym". Spojrzą na Ciebie dziwnym, Zezowatym spojrzeniem, a potem odrzucą Cię jako tę dziwaczną dziewczynę. 93% z Was tego nie chce.

Try " I ' d chciałbym porozmawiać z tobą o scenariuszu gdzie..."zamiast tego. Albo: "czy możesz podać mi przykład?"Oba są dobre. Nazywanie ich "testami Akceptacyjnymi" zaczyna sprawiać, że ludzie myślą, że faktycznie wykonujesz testy, co oznaczałoby, że wiesz, co robisz i po prostu chcesz się upewnić, że to zrobiłeś. W tym momencie rozmowy skupiają się na tym, jak szybko można wyciągnąć niewłaściwą rzecz, zamiast na tym, że wyciągasz niewłaściwą rzecz.

And you ' re getting the wrong wypad. Naprawdę, szczerze, jesteś.Nawet jeśli myślisz, że nie jesteś, to tylko dlatego, że nie rozumiesz ignorancji drugiego rzędu. Nie wiesz, że nie wiesz, i to jest w porządku, tak długo, jak znajdziesz miejsca, gdzie Może wiedzieć, że nie wiesz. (Nie znajdziesz ich wszystkich. Nie pozwól, aby paradoks kategoryzacji powstrzymywał cię w nocy.)

Jedynym sposobem, aby naprawdę to zrobić, jest uzyskanie wszystkich wymagań z góry, i wiesz, co się dzieje, gdy spróbuj tego. Zgadza się. To Wodospad. Pamiętasz Nadgodziny? Praca w weekend? Siedem lat, w których ani jedna rzecz, którą stworzyłeś, nie trafiła do produkcji? Jeśli chcesz tego uniknąć, masz tylko jedną szansę: założyć, że się mylisz, porozmawiać o tym, aby być mniej błędnym, a następnie zaakceptować, że jesteś nadal w błędzie i tak to zrób. Pisanie testów zbyt wcześnie oznacza, że masz nawet więcej szansy na błąd, a teraz trudniej się zmienić i wszyscy myślą masz racje a premier mierzy Ci predkosc i teraz jestes zobowiazany sie mylic przez kolejne 2 tygodnie. I-co gorsza-zaraz sprawdzisz, że też się mylisz.

Jeszcze raz. rozmowy są o wiele ważniejsze niż narzędzia BDD.

Proszę, nie skupiaj się na narzędziach. Narzędzia są tylko mechanizmem do przechwytywania rozmów i upewniania się, że są odtwarzane w kodzie. Scenariusze nie zastępują rozmów, już niż karta indeksowa 3 x 5 jest zamiennikiem wymagań.

Powiedziawszy to, jeśli musisz zacząć od narzędzia, umieść Slim za Fitnesse, aby mógł działać lovely Given / When / Thens bez bałaganu ze stołami i oprawami Fit. GivWenZen jest oparty na Slim i obu z nich skał. FitSharp jest odpowiednikiem dla tych z Was w przestrzeni. NET. Lub po prostu użyj Cucumber, lub SpecFlow, lub zapukaj trochę niestandardowej DSL * , która wykona zadanie dobrze dla lat.

Transparentność :* ja to napisałem. I kawałki JBehave. Szkoda, że nie nazwaliśmy tego "Dont-concentrate-on-BDD-tools-Behave". Mogę być mocno zaangażowany w inne kawałki BDD. Plus Dan North kupi mi piwo, jeśli uda mi się przekazać tę wiadomość, Więc to nie jest do końca bezstronna Rada.

Bez względu na to - miej już rozmowy. To tylko ludzie. Idź pogadać.

 112
Author: Lunivore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-30 17:34:25

Nie wiem, czy istnieje coś takiego, ściśle mówiąc, jak "test BDD". BDD to filozofia, która podpowiada, jak najlepiej współdziałać i współpracować z interesariuszami, aby ukończyć złożony projekt. Nie wydaje bezpośrednio żadnych recept na najlepszy sposób pisania testów. Innymi słowy, prawdopodobnie nadal będziesz mieć wszystkie zwykłe rodzaje testów (w tym testy akceptacyjne) w ramach projektu filozofii BDD.

Kiedy słyszymy o "frameworkach BDD", mówca zwykle oznacza framework za pisanie wszystkich typowych testów, ale z BDD twist. Na przykład w RSpec nadal piszesz testy jednostkowe; po prostu dodajesz do nich smak BDD.

 5
Author: John Feminella,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 15:22:26

Lubię rozróżniać "specyfikacje" i " testy."

Jeśli piszę metodę o nazwie GetAverage(IEnumerable<int> numbers), napiszę mniej lub bardziej standardowy test jednostkowy.

Jeśli opisuję metodę o nazwie CalculateSalesTax(decimal amount, State state, Municipality municipality), nadal napiszę test jednostkowy, ale nazwę go specyfikacją, ponieważ zmienię go na (1), Aby zweryfikować zachowanie procedury i (2) ponieważ sam test będzie dokumentował zarówno procedurę, jak i jej akceptację kryteria.

Rozważmy:

[TestFixture]
public class When_told_to_calculate_sales_tax_for_a_given_state_and_municipality() // the name defines the context
{
    // set up mocks and expected behaviour
    StateSalesTaxWebService stateService 
        = the_dependency<IStateSalesTaxWebService>;
    MunicipalSurchargesWebService municipalService 
        = the_dependency<IMunicipalSurchargesWebService>;

   stateService.Stub(x => x.GetTaxRate(State.Florida))
        .Return(0.6);
    municipalService.Stub(x => x.GetSurchargeRate(Municipality.OrangeCounty))
        .Return(0.05);

    // run what's being tested
    decimal result = new SalesTaxCalculator().CalculateSalesTax
        (10m, State.Florida, Municipality.OrangeCounty);

    // verify the expected behaviour (these are the specifications)
    [Test]
    public void should_check_the_state_sales_tax_rate()
    {
        stateService.was_told_to(x => x.GetTaxRate(State.Florida)); // extension methods wrap assertions
    }

    [Test]
    public void should_check_the_municipal_surcharge_rate()
    {
        municipalService.was_told_to(x => x.GetSurchargeRate(Municipality.OrangeCounty));
    }

    [Test]
    public void should_return_the_correct_sales_tax_amount()
    {
        result.should_be_equal_to(10.65m);
    }
}
 2
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-13 05:17:19

JBehave (i NBehave niedawno dodali to samo wsparcie) działa ze zwykłymi plikami testowymi, więc podczas gdy wiele innych frameworków dodaje "BDD taste tounit tests", specyfikacje zachowania oparte na tekście / przykłady utworzone za pomocą JBehave są odpowiednie do testów akceptacyjnych. I nie, nie potrzebujesz fitnesse do tego.

Aby zorientować się jak to działa proponuję jbehaves 2min tutorial .

 2
Author: Cellfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-03 06:36:33

Podczas gdy BDD jest większy niż zakres samych testów, istnieją rzeczywiście testy BDD. Testy te są testami jednostkowymi, które są zgodne z językiem BDD.

Podany jakiś kontekst początkowy (the givens), W przypadku wystąpienia zdarzenia, następnie zapewnić pewne wyniki.

Istnieje kilka dobrych frameworków BDD dostępnych w zależności od preferowanego języka. JBehave for Java RSpec dla Ruby NBehave dla. NET

 1
Author: David Yancey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-13 18:38:29

Do testowania BDD w Flex możesz wypróbować GivWenZen-flex check it out http://bitbucket.org/loomis/givwenzen-flex .

Cheers, Kris

 0
Author: Kris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-25 21:48:38

Dobrze zaimplementowane testy BDD xbehavior są kryteriami akceptacji użytkowników.

Xspecification testy BDD są zwykle testami jednostkowymi i są mało prawdopodobne, aby były akceptowalnymi kryteriami akceptacji użytkownika.

 0
Author: Chris Marisic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-08 17:27:25