BDD mit Python üben [geschlossen]

133

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.

JtR
quelle
1
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.

Ryan
quelle
7
Andrew Bennetts hat kürzlich ein paar Posts darüber geschrieben, warum er glaubt, dass Doktest missbraucht werden. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa
4
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

user333958
quelle
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 :(
Rachel
3
Es gibt auch einige Alternativen zu Salat, wie z. B. Behave; Hier ist ein Blog-Beitrag, der sie vergleicht und sich für Behave einsetzt .
Driftcatcher
1
Danke @seafangs - Behave sieht für große Projekte viel besser aus als Salat.
Jamesc
Wenn Sie Django verwenden, sparen Sie sich Zeit bei der Verwendung von Salat. Die aktuelle Version 2.19 funktioniert nicht mit dem neuesten Django.
James Lin
46

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.

Gesellig
quelle
11
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 .

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

pip install specloud

Ludibrio ist eine Bibliothek für Testdoppel (Mocks, Stubs und Dummies). Installieren Sie es über

pip install ludibrio

Und PyCukes ist das Hauptwerkzeug für BDD. Es werden die Szenarien usw. ausgeführt.

pip install pycukes

Weitere Informationen finden Sie in der Tooldokumentation bei PyPi .

Douglas Camata
quelle
Fand dieses nützliche Dokument, als
ich
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örn Pollex
1
Ich bevorzuge die sichere Behauptung DSL.
Fatuhoku
@ 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 .

Steve
quelle
9

Sie können "sicher" für ausdrucksstarke Aussagen verwenden (genau wie in RSpec).

Gabriel Falcão
quelle
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.


quelle
6

Ich mag Pyccuracy sehr. Ich implementiere es derzeit in einem mittelgroßen Projekt.

Refael Ackermann
quelle
3
Ich würde mich für einen Vergleich zwischen Pyccuracy und Lettuce interessieren, den jeder teilen könnte.
michela
Vielleicht nehmen Sie auch Freshen (in einer Antwort oben verlinkt) in den Vergleich auf.
Amit
Bereits hier gefragt: quora.com/…
amit
6

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 = 3

    with 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 in 0.0002 seconds)
mdwhatcott
quelle
4

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.

ddaa
quelle
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.
Aisbaa