Jakie są najbardziej zaawansowane frameworki i narzędzia dostępne dla Pythona do ćwiczenia rozwoju opartego na zachowaniu? Szczególnie znalezienie podobnych narzędzi, jak rspec i mocha dla ruby, byłoby świetne.
Osobiście używam makiety nosa i voidspace w stylu projektowania opartego na zachowaniu. W szczególności wtyczka specyfikacji dla nosa jest doskonała dla BDD.
Myślę, że doctest w rzeczywistości jest bardziej zgodny z filozofią BDD, kiedy traktujesz go tak, jak był przeznaczony: zaczynasz pisać o oprogramowaniu, a następnie przeplatasz to z przykładami, które również tworzą testy. Jest również opisywany jako „rozwój oparty na dokumentach” - chodzi o skupienie się na zewnętrznej, opisywalnej funkcjonalności, a nie na wewnętrznych jednostkach pracy. Myślę, że tradycja xUnit jest w tym okropna.
ianb
48
Sałata znaczy być narzędziem podobnym do ogórka dla Pythona: http://lettuce.it/
Możesz pobrać źródło na github.com/gabrielfalcao/lettuce
Użytkownicy systemu Windows rozważający sałatę powinni wiedzieć w chwili pisania tego tekstu, że obsługa tego systemu operacyjnego nie jest prosta.
leonigmig
7
Każdy użytkownik zamierzający używać sałaty z django powinien być świadomy, że domyślnie używa on twojej domyślnej bazy danych do testów. Ten interesujący projekt kosztował mnie jedną produkcyjną bazę danych :(
Przerzuciłem się na zachowanie sałaty, gdy jej domyślne zachowanie polegające na używaniu domyślnej bazy danych do testowania w projekcie django kosztowało mnie produkcyjną bazę danych na serwerze na żywo :( Naprawdę lubię się zachowywać; zacząłem projekt django-behave, aby go podłączyć Framework testowy django github.com/rwillmer/django-behave
Rachel
1
Czuję twój ból, cieszę się również, że twoje cierpienie przyczyniło się do rozkwitu ekosystemu django. ;-)
John Wang
1
Czy mogę używać behave bez plików funkcji? Nie mam użytkowników nietechnicznych, więc pisanie ich jest dla mnie tylko hałasem. Jeśli ktoś nie może przeczytać moich podanych / kiedy / wtedy testów, nie ma w tym żadnego interesu.
jeremyjjbrown
29
Polecam skorzystać z zestawu narzędzi opracowanych, aby pomóc programistom w praktyce BDD i TDD. Ten zestaw narzędzi składa się z: pycukes , specloud , ludibrio i should-dsl .
Powinien DSL da ci oczekiwania podobne do RSpec. Wszystko, co możesz zrobić z RSpec Expectation API, robi też should-dsl. Możesz pobrać najnowszą wersję z Github .
SpecLoud pomaga w uruchamianiu unittestów podobnych do BDD. Możesz go zainstalować, wykonując
pip install specloud
Ludibrio to biblioteka do testowych gier podwójnych (Mocks, Stubs i Dummies). Zainstaluj go przez
pip install ludibrio
I PyCukes jest głównym narzędziem BDD. Będzie uruchamiać scenariusze itp. Ponownie,
pip install pycukes
Aby uzyskać więcej informacji, przeczytaj dokumentację narzędzi w PyPi .
Znalazłem ten przydatny dokument podczas szukania szczegółów Twojej odpowiedzi: arxiv.org/pdf/1007.1722
amit
Lubię powinien-dsl. Rozważałem DSL dla pythona BDD - jest ich kilka, ten wydaje się dość wyrazisty.
Danny Staple
Nie mogę znaleźć żadnych informacji o frameworku BDD o nazwie Pyramid. Odnośnik, do którego odwołuje się artykuł, do którego prowadzi @phaedrus, prowadzi do podejrzanie wyglądającej witryny, która nie ma nic wspólnego z testowaniem, a wyszukiwanie w Google wskazuje na Pyramid , strukturę sieciową. Czy każdy może podać aktualny link?
@ BjörnPollex, nazwa Pyramid nie mogła być używana przez twórców tych narzędzi z powodu Pyramid Web Framework. Teraz to tylko oddzielne narzędzia.
Douglas Camata
11
Świetny post i odpowiedzi. Chciałem tylko zaktualizować, aby uwzględnić Odświeżenie na tej liście, ponieważ przeczytałem, że pycukes zostało wycofane. Dobry post o używaniu BDD i Django z Freshen jest tutaj .
Parabeny! Całkowicie zaskoczyłeś mnie kodem w magic.py. Nie miałem pojęcia, że w Pythonie możliwe są „metody rozszerzające” (klasy otwarte).
mdwhatcott
8
Projekt Pyccuracy to próba dostarczenia specyficznego dla domeny języka dla BDD w Pythonie.
W przeciwieństwie do doctest, który działa na poziomie API, koduje operacje wyższego poziomu, takie jak ładowanie strony internetowej i wysyłanie formularza. Nie używałem tego, ale wygląda nieco obiecująco, jeśli tego właśnie szukasz.
Wypróbuj Pyspecs . Uczynienie testów łatwymi do odczytania i ciągłe uruchamianie podczas programowania było dwoma z moich głównych celów podczas tworzenia tego projektu.
Kod testu:
from pyspecs import given, when, then, and_, the, this
with given.two_operands:
a =2
b =3with when.supplied_to_the_add_function:
total = a + b
with then.the_total_should_be_mathmatically_correct:
the(total).should.equal(5)with and_.the_total_should_be_greater_than_either_operand:
the(total).should.be_greater_than(a)
the(total).should.be_greater_than(b)with when.supplied_to_the_subtract_function:
difference = b - a
with then.the_difference_should_be_mathmatically_correct:
the(difference).should.equal(1)
Wyjście konsoli:
# run_pyspecs.py|• given two operands
|• when supplied to the add function
|• then the total should be mathmatically correct
|•and the total should be greater than either operand
|• when supplied to the subtract function
|• then the difference should be mathmatically correct
(ok)6 passed (6 steps,1 scenarios in0.0002 seconds)
Ja prawdopodobnie całkowicie brakuje punktu, ale co mam zachowane w oryginalnym papierze BDD , że BDD właśnie TDD przepakowane podkreślić pewne najlepszych praktyk.
Jeśli moja interpretacja jest poprawna, możesz uzyskać framework BDD po prostu zmieniając nazwy metod w dowolnej implementacji xUnit . Więc po prostu idź dalej i użyj standardowej biblioteki unittest .
TDD to naprawdę rewolucjonizująca praktyka w zupełnie innej skali niż BDD. Wciąż doceniam sposób pisania testów w stylu BDD.
JtR,
1
BDD rozpoczął się na poziomie jednostki, to prawda. Rozwinął się dość szybko, obejmując zachowanie na poziomie systemu, w którym konteksty, zdarzenia i wyniki korzystają z nieco większej możliwości ponownego wykorzystania - stąd mnożenie się narzędzi obsługujących zarówno to, jak i scenariusze w języku naturalnym uchwycone podczas rozmów z nietechnicznymi interesariuszami. Odkąd zadano to pytanie, przenieśliśmy BDD na poziom wizji projektu, używając funkcji Feature Injection, z takim samym naciskiem na odkrywanie poprzez konwersację i język domeny. Wciąż nic nowego pod słońcem.
Odpowiedzi:
Ian Bicking zaleca używanie doctest do projektowania opartego na zachowaniu:
Osobiście używam makiety nosa i voidspace w stylu projektowania opartego na zachowaniu. W szczególności wtyczka specyfikacji dla nosa jest doskonała dla BDD.
źródło
Sałata znaczy być narzędziem podobnym do ogórka dla Pythona: http://lettuce.it/
Możesz pobrać źródło na github.com/gabrielfalcao/lettuce
źródło
Naprawdę polecam zachowanie .
Szukając klonu Cucumber dla Pythona, zacząłem używać sałaty, ale okazało się, że jest to dość niezdarnie zaprojektowana replika. Bardzo Unpythonic.
Wtedy odkryłem, jak zachowuję się i byłem z tego naprawdę zadowolony.
źródło
Polecam skorzystać z zestawu narzędzi opracowanych, aby pomóc programistom w praktyce BDD i TDD. Ten zestaw narzędzi składa się z: pycukes , specloud , ludibrio i should-dsl .
Powinien DSL da ci oczekiwania podobne do RSpec. Wszystko, co możesz zrobić z RSpec Expectation API, robi też should-dsl. Możesz pobrać najnowszą wersję z Github .
SpecLoud pomaga w uruchamianiu unittestów podobnych do BDD. Możesz go zainstalować, wykonując
Ludibrio to biblioteka do testowych gier podwójnych (Mocks, Stubs i Dummies). Zainstaluj go przez
I PyCukes jest głównym narzędziem BDD. Będzie uruchamiać scenariusze itp. Ponownie,
Aby uzyskać więcej informacji, przeczytaj dokumentację narzędzi w PyPi .
źródło
Świetny post i odpowiedzi. Chciałem tylko zaktualizować, aby uwzględnić Odświeżenie na tej liście, ponieważ przeczytałem, że pycukes zostało wycofane. Dobry post o używaniu BDD i Django z Freshen jest tutaj .
źródło
Możesz użyć „sure” do wyrażania asercji (tak jak w RSpec)
źródło
Projekt Pyccuracy to próba dostarczenia specyficznego dla domeny języka dla BDD w Pythonie.
W przeciwieństwie do doctest, który działa na poziomie API, koduje operacje wyższego poziomu, takie jak ładowanie strony internetowej i wysyłanie formularza. Nie używałem tego, ale wygląda nieco obiecująco, jeśli tego właśnie szukasz.
źródło
Bardzo lubię Pyccuracy . Obecnie wdrażam go w średniej wielkości projekcie.
źródło
Wypróbuj Pyspecs . Uczynienie testów łatwymi do odczytania i ciągłe uruchamianie podczas programowania było dwoma z moich głównych celów podczas tworzenia tego projektu.
Kod testu:
Wyjście konsoli:
źródło
Ja prawdopodobnie całkowicie brakuje punktu, ale co mam zachowane w oryginalnym papierze BDD , że BDD właśnie TDD przepakowane podkreślić pewne najlepszych praktyk.
Jeśli moja interpretacja jest poprawna, możesz uzyskać framework BDD po prostu zmieniając nazwy metod w dowolnej implementacji xUnit . Więc po prostu idź dalej i użyj standardowej biblioteki unittest .
EDYCJA: Szybki Google włączył moduł Zachowania w Cheese Shop . Dalsze poszukiwania BDD tam nie znalazły nic innego.
źródło