Practicando BDD con python [cerrado]

133

¿Cuáles son los marcos y herramientas más avanzados que hay disponibles para python para practicar Behavior Driven Development? Especialmente encontrar herramientas similares como rspec y mocha para ruby ​​sería genial.

JtR
fuente
1
Flowp "permite escribir pruebas en un estilo RSpec BDD con un mínimo de magia".
Carl G
77
Solo en SO es ser altamente informativo igual "no constructivo".
jeremyjjbrown

Respuestas:

38

Ian Bicking recomienda usar doctest para el diseño basado en el comportamiento:

Personalmente, tiendo a usar simulacros de nariz y espacio vacío en un estilo de diseño basado en el comportamiento. Específicamente, el complemento de especificaciones para nose es excelente para BDD.

Ryan
fuente
77
Andrew Bennetts escribió recientemente un par de publicaciones sobre por qué cree que se abusa de doctest. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa
44
Creo que doctest en realidad está más alineado con la filosofía de BDD, cuando lo tratas como se pretendía: comienzas a escribir sobre el software y luego lo intercalas con ejemplos que también forman pruebas. También se ha descrito como "desarrollo impulsado por documentos": el objetivo es centrarse en la funcionalidad externa que se puede describir, no en unidades internas de trabajo. Creo que la tradición xUnit es horrible para hacer eso.
ianb
48

Lechuga significa ser una herramienta similar a un pepino para python: http://lettuce.it/

Puede obtener la fuente en github.com/gabrielfalcao/lettuce

usuario333958
fuente
Los usuarios de Windows que estén considerando la lechuga deben saber, al momento de escribir, que el soporte para ese sistema operativo no es sencillo.
leonigmig
77
Cualquier usuario que tenga la intención de usar lechuga con django debe saber que, de manera predeterminada, usa su base de datos predeterminada para las pruebas. Esta interesante elección de diseño me costó una base de datos de producción :(
Rachel
3
También hay algunas alternativas a la lechuga, como Behave; Aquí hay una publicación de blog que los compara y aboga por Behave .
driftcatcher
1
Gracias @seafangs - Behave parece mucho más manejable para proyectos grandes que Lettuce.
jamesc
Si está usando django, ahorre algo de tiempo usando Lettuce, la versión actual 2.19 no funciona con la última versión de django.
James Lin
46

Realmente recomiendo comportarse .

Buscando un clon de pepino para Python, comencé a usar lechuga, pero encontré una réplica bastante torpemente diseñada. Muy poco pitón.

Luego descubrí comportarse, y he estado muy feliz con eso.

Gregario
fuente
11
Cambié a comportarse de la lechuga cuando su comportamiento predeterminado de usar la base de datos predeterminada para probar en un proyecto django me costó una base de datos de producción en un servidor en vivo :( Realmente me gusta comportarse; Comencé el proyecto django-behave para conectarlo marco de prueba de django github.com/rwillmer/django-behave
Rachel
1
Siento tu dolor, también me alegra ver que tu sufrimiento ha contribuido a la prosperidad del ecosistema django. ;-)
John Wang
1
¿Puedo usar el comportamiento sin los archivos de características? No tengo usuarios no técnicos, por lo que escribirlos es solo un ruido para mí. Si alguien no puede leer mis pruebas dadas / cuándo / luego, no tiene nada que ver.
jeremyjjbrown
29

Le recomiendo que use un conjunto de herramientas desarrolladas para ayudar a los programadores en la práctica de BDD y TDD. Este conjunto de herramientas está compuesto por: pycukes , specloud , ludibrio y should-dsl .

Debe-DSL le dará expectativas similares a las de RSpec. Todo lo que puede hacer con la API de expectativas de RSpec, should-dsl también lo hace. Puedes obtener la última versión de Github .

SpecLoud lo ayuda a ejecutar pruebas de unidad similares a BDD. Puedes instalarlo haciendo

pip install specloud

Ludibrio es una biblioteca para dobles de prueba (Mocks, Stubs y Dummies). Instalarlo a través de

pip install ludibrio

Y PyCukes es la herramienta principal para BDD. Ejecutará los escenarios, etc. De nuevo,

pip install pycukes

Para obtener más información, lea la documentación de las herramientas en PyPi .

Douglas Camata
fuente
Encontré este útil documento mientras buscaba detalles de su respuesta: arxiv.org/pdf/1007.1722
amit
Me gusta debería-dsl. He estado considerando un DSL para Python BDD: hay algunos, este parece bastante expresivo.
Danny Staple
No puedo encontrar ninguna información sobre un marco BDD llamado Pyramid. El enlace al que se hace referencia en el documento vinculado por @phaedrus conduce a un sitio de aspecto dudoso que no tiene nada que ver con las pruebas y los puntos de Google para Pyramid , el marco web. ¿Alguien puede proporcionar un enlace actualizado?
Björn Pollex
1
Prefiero la afirmación segura DSL.
fatuhoku
@ BjörnPollex, el nombre Pyramid no pudo ser utilizado por estos creadores de herramientas debido a Pyramid Web Framework. Ahora solo son herramientas separadas.
Douglas Camata
11

Gran publicación y respuestas. Solo quería actualizar para incluir Freshen en esta lista a medida que leía pycukes se suspende. Una buena publicación sobre el uso de BDD y Django con Freshen está aquí .

Steve
fuente
9

Puede usar "seguro" para afirmaciones expresivas (al igual que en RSpec)

Gabriel Falcão
fuente
Parabenos! Me voló la cabeza totalmente con el código en magic.py. No tenía idea de que los "métodos de extensión" (clases abiertas) eran posibles en Python.
mdwhatcott
8

El proyecto Pyccuracy es un esfuerzo para proporcionar un lenguaje de dominio específico para BDD en Python.

A diferencia de doctest, que funciona a nivel de API, codifica operaciones de nivel superior, como cargar una página web y enviar un formulario. No lo he usado, pero parece algo prometedor si eso es lo que estás buscando.


fuente
6

Me gusta mucho Pyccuracy . Lo estoy implementando en un proyecto de tamaño mediano en estos días.

Refael Ackermann
fuente
3
Me interesaría cualquier comparación reciente de Pyccuracy vs Lettuce que cualquiera pueda compartir.
michela
Tal vez incluya Freshen (vinculado en una respuesta anterior) también en la comparación.
Amit
Ya preguntado aquí: quora.com/…
amit
6

Prueba pyspecs . Hacer que las pruebas sean fáciles de leer y ejecutar constantemente durante el desarrollo fueron dos de mis principales objetivos al crear este proyecto.

Código de prueba:

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)

Salida de consola:

# 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
fuente
4

Probablemente me estoy perdiendo el punto por completo, pero lo que conservé del documento original de BDD fue que BDD era solo TDD reempaquetado para enfatizar algunas de las mejores prácticas.

Si mi interpretación es correcta, puede obtener un marco BDD simplemente cambiando el nombre de los métodos en cualquier implementación de xUnit . Así que siga adelante y use la unidad de prueba estándar de la biblioteca .

EDITAR: un google rápido apareció un módulo de comportamiento en la tienda de queso . La búsqueda adicional de BDD allí no encontró nada más.

ddaa
fuente
TDD realmente es la práctica revolucionaria en una escala totalmente diferente a BDD. Aún así, he llegado a apreciar la forma de escribir de forma probada en estilo BDD.
JtR
1
BDD comenzó en el nivel de la unidad, esto es cierto. Creció bastante rápido para abarcar el comportamiento a nivel del sistema, donde los contextos, eventos y resultados se benefician de un poco más de reutilización, de ahí la proliferación de herramientas para soportar tanto eso como los escenarios de lenguaje natural capturados de conversaciones con partes interesadas no técnicas. Desde que se hizo esta pregunta, hemos llevado a BDD al nivel de visión del proyecto, utilizando Feature Injection, con el mismo énfasis en el descubrimiento a través de la conversación y el lenguaje de dominio. Todavía nada nuevo bajo el sol.
Lunivore
Me gusta esta charla sobre bdd youtube.com/watch?v=pherUEzdJow . Muestro una buena manera de escribir especificaciones y tenerlo como prueba.
aisbaa