Welches sind die fortschrittlichsten Frameworks und Tools, die für Python zum Üben der verhaltensgesteuerten Entwicklung verfügbar sind? Besonders ähnliche Werkzeuge wie rspec und Mokka für Rubin zu finden, wäre großartig.
Flowp "ermöglicht das Schreiben von Tests in einem RSpec BDD-Stil mit einem Minimum an Magie".
Carl G
7
Nur auf SO ist es "nicht konstruktiv", hoch informativ zu sein.
Jeremyjjbrown
Antworten:
38
Ian Bicking empfiehlt die Verwendung von doctest für verhaltensorientiertes Design:
Ich persönlich neige dazu, Nasen- und Leerraum-Mock in einem verhaltensorientierten Designstil zu verwenden. Insbesondere das Spezifikations- Plugin für die Nase eignet sich hervorragend für BDD.
Ich denke, doctest ist tatsächlich mehr auf die Philosophie von BDD ausgerichtet, wenn Sie es so behandeln, wie es beabsichtigt war: Sie beginnen, über die Software zu schreiben, und mischen dies dann mit Beispielen ein, die auch Tests bilden. Es wurde auch als "dokumentengesteuerte Entwicklung" beschrieben - es geht darum, sich auf nach außen beschreibbare Funktionen zu konzentrieren, nicht auf interne Arbeitseinheiten. Ich denke, Tradition xUnit ist schrecklich darin.
ianb
48
Kopfsalat bedeutet, ein gurkenähnliches Werkzeug für Python zu sein: http://lettuce.it/
Sie können die Quelle unter github.com/gabrielfalcao/lettuce abrufen
Windows-Benutzer, die Salat in Betracht ziehen, sollten zum Zeitpunkt des Schreibens wissen, dass die Unterstützung für dieses Betriebssystem nicht einfach ist.
Leonigmig
7
Benutzer, die beabsichtigen, Salat mit Django zu verwenden, sollten sich darüber im Klaren sein, dass standardmäßig Ihre Standarddatenbank zum Testen verwendet wird. Diese interessante Design-Wahl hat mich eine Produktionsdatenbank gekostet :(
Auf der Suche nach einem Gurkenklon für Python habe ich angefangen, Salat zu verwenden, fand ihn aber als ziemlich ungeschickt gestaltete Nachbildung. Sehr unpythonisch.
Dann entdeckte ich Verhalten und war sehr zufrieden damit.
Ich habe von Salat auf Verhalten umgestellt, als mich das Standardverhalten, die Standarddatenbank zum Testen in einem Django-Projekt zu verwenden, eine Produktionsdatenbank auf einem Live-Server gekostet hat :( Ich mag es wirklich, mich zu verhalten; ich habe das Django-Verhaltensprojekt gestartet, um es einzubinden Djangos Test-Framework github.com/rwillmer/django-behave
Rachel
1
Ich fühle deinen Schmerz und bin froh zu sehen, dass dein Leiden zum Gedeihen des Django-Ökosystems beigetragen hat. ;-)
John Wang
1
Kann ich mich ohne die Feature-Dateien verhalten? Ich habe keine nicht-technischen Benutzer, daher ist das Schreiben für mich nur ein Lärm. Wenn jemand meine gegebenen / wann / dann Tests nicht lesen kann, hat er dort in keiner Weise etwas zu suchen.
Jeremyjjbrown
29
Ich empfehle Ihnen, eine Reihe von Tools zu verwenden, die entwickelt wurden, um Programmierern beim Üben von BDD und TDD zu helfen. Dieses Tool-Set besteht aus: Pycukes , Specloud , Ludibrio und Should-DSL .
Ich mag sollte-dsl. Ich habe über ein DSL für Python BDD nachgedacht - es gibt einige, dieses scheint ziemlich ausdrucksstark zu sein.
Danny Staple
Ich kann keine Informationen zu einem BDD-Framework namens Pyramid finden. Der Link, auf den in dem von @phaedrus verlinkten Artikel verwiesen wird, führt zu einer zweifelhaft aussehenden Website, die nichts mit Testen zu tun hat, und googelt auf Pyramid , das Webframework. Kann jemand einen aktuellen Link bereitstellen?
@ BjörnPollex, der Name Pyramid konnte von diesen Tool-Erstellern aufgrund des Pyramid Web Framework nicht verwendet werden. Jetzt sind sie nur noch getrennte Werkzeuge.
Douglas Camata
11
Toller Beitrag und Antworten. Ich wollte nur aktualisieren, um Freshen in diese Liste aufzunehmen, während ich Pycukes lese. Ein guter Beitrag über die Verwendung von BDD und Django mit Freshen ist hier .
Parabene! Du hast mich mit dem Code in magic.py total umgehauen. Ich hatte keine Ahnung, dass "Erweiterungsmethoden" (offene Klassen) in Python möglich sind.
Mdwhatcott
8
Das Pyccuracy-Projekt ist ein Versuch, eine domänenspezifische Sprache für BDD in Python bereitzustellen.
Im Gegensatz zu doctest, das auf API-Ebene funktioniert, werden Vorgänge auf höherer Ebene wie das Laden einer Webseite und das Senden eines Formulars codiert. Ich habe es nicht benutzt, aber es sieht etwas vielversprechend aus, wenn Sie danach suchen.
Probieren Sie Pyspecs aus . Tests leicht lesbar zu machen und während der Entwicklung ständig auszuführen, waren zwei meiner Hauptziele bei der Erstellung dieses Projekts.
Testcode:
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)
Konsolenausgabe:
# 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)
Ich vermisse den Punkt wahrscheinlich völlig, aber was ich vom ursprünglichen BDD-Papier beibehalten habe, war, dass BDD nur TDD neu verpackt wurde, um einige Best Practices hervorzuheben.
Wenn meine Interpretation korrekt ist, können Sie ein BDD-Framework erhalten, indem Sie die Methoden in jeder xUnit- Implementierung umbenennen . Verwenden Sie einfach die unittest der Standardbibliothek .
TDD ist wirklich die revolutionierende Praxis in einem völlig anderen Maßstab als BDD. Trotzdem habe ich gelernt, wie man testgetrieben im BDD-Stil schreibt.
JtR
1
BDD wurde auf Einheitenebene gestartet, dies ist wahr. Es wuchs ziemlich schnell, um Verhalten auf Systemebene zu erfassen, bei dem die Kontexte, Ereignisse und Ergebnisse von etwas mehr Wiederverwendbarkeit profitieren - daher die Verbreitung von Tools zur Unterstützung sowohl dieser als auch von Szenarien in natürlicher Sprache, die aus Gesprächen mit nichttechnischen Stakeholdern gewonnen wurden. Seit diese Frage gestellt wurde, haben wir BDD mithilfe von Feature Injection auf die Ebene der Projektvision gebracht, wobei der Schwerpunkt auf der Erkennung durch Konversation und Domänensprache liegt. Immer noch nichts Neues unter der Sonne.
Lunivore
Ich mag diesen Vortrag über bdd youtube.com/watch?v=pherUEzdJow . Ich zeige einen guten Weg, um Spezifikationen zu schreiben und sie als Tests zu haben.
Antworten:
Ian Bicking empfiehlt die Verwendung von doctest für verhaltensorientiertes Design:
Ich persönlich neige dazu, Nasen- und Leerraum-Mock in einem verhaltensorientierten Designstil zu verwenden. Insbesondere das Spezifikations- Plugin für die Nase eignet sich hervorragend für BDD.
quelle
Kopfsalat bedeutet, ein gurkenähnliches Werkzeug für Python zu sein: http://lettuce.it/
Sie können die Quelle unter github.com/gabrielfalcao/lettuce abrufen
quelle
Ich empfehle wirklich, sich zu benehmen .
Auf der Suche nach einem Gurkenklon für Python habe ich angefangen, Salat zu verwenden, fand ihn aber als ziemlich ungeschickt gestaltete Nachbildung. Sehr unpythonisch.
Dann entdeckte ich Verhalten und war sehr zufrieden damit.
quelle
Ich empfehle Ihnen, eine Reihe von Tools zu verwenden, die entwickelt wurden, um Programmierern beim Üben von BDD und TDD zu helfen. Dieses Tool-Set besteht aus: Pycukes , Specloud , Ludibrio und Should-DSL .
Sollte-DSL wird Ihnen RSpec-ähnliche Erwartungen geben. Alles, was Sie mit der RSpec Expectation API tun können, sollte auch-dsl tun. Sie können die neueste Version von Github herunterladen .
SpecLoud hilft Ihnen beim Ausführen von BDD-ähnlichen Unittests. Sie können es installieren, indem Sie
Ludibrio ist eine Bibliothek für Testdoppel (Mocks, Stubs und Dummies). Installieren Sie es über
Und PyCukes ist das Hauptwerkzeug für BDD. Es werden die Szenarien usw. ausgeführt.
Weitere Informationen finden Sie in der Tooldokumentation bei PyPi .
quelle
Toller Beitrag und Antworten. Ich wollte nur aktualisieren, um Freshen in diese Liste aufzunehmen, während ich Pycukes lese. Ein guter Beitrag über die Verwendung von BDD und Django mit Freshen ist hier .
quelle
Sie können "sicher" für ausdrucksstarke Aussagen verwenden (genau wie in RSpec).
quelle
Das Pyccuracy-Projekt ist ein Versuch, eine domänenspezifische Sprache für BDD in Python bereitzustellen.
Im Gegensatz zu doctest, das auf API-Ebene funktioniert, werden Vorgänge auf höherer Ebene wie das Laden einer Webseite und das Senden eines Formulars codiert. Ich habe es nicht benutzt, aber es sieht etwas vielversprechend aus, wenn Sie danach suchen.
quelle
Ich mag Pyccuracy sehr. Ich implementiere es derzeit in einem mittelgroßen Projekt.
quelle
Probieren Sie Pyspecs aus . Tests leicht lesbar zu machen und während der Entwicklung ständig auszuführen, waren zwei meiner Hauptziele bei der Erstellung dieses Projekts.
Testcode:
Konsolenausgabe:
quelle
Ich vermisse den Punkt wahrscheinlich völlig, aber was ich vom ursprünglichen BDD-Papier beibehalten habe, war, dass BDD nur TDD neu verpackt wurde, um einige Best Practices hervorzuheben.
Wenn meine Interpretation korrekt ist, können Sie ein BDD-Framework erhalten, indem Sie die Methoden in jeder xUnit- Implementierung umbenennen . Verwenden Sie einfach die unittest der Standardbibliothek .
BEARBEITEN: Ein schnelles Google hat ein Verhaltensmodul im Cheese Shop aufgetaucht . Bei der weiteren Suche nach BDD wurde dort nichts anderes gefunden.
quelle