¿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.
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.
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
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 :(
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 .
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ö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í .
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.
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 =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)
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 in0.0002 seconds)
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 .
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.
Respuestas:
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.
fuente
Lechuga significa ser una herramienta similar a un pepino para python: http://lettuce.it/
Puede obtener la fuente en github.com/gabrielfalcao/lettuce
fuente
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.
fuente
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
Ludibrio es una biblioteca para dobles de prueba (Mocks, Stubs y Dummies). Instalarlo a través de
Y PyCukes es la herramienta principal para BDD. Ejecutará los escenarios, etc. De nuevo,
Para obtener más información, lea la documentación de las herramientas en PyPi .
fuente
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í .
fuente
Puede usar "seguro" para afirmaciones expresivas (al igual que en RSpec)
fuente
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
Me gusta mucho Pyccuracy . Lo estoy implementando en un proyecto de tamaño mediano en estos días.
fuente
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:
Salida de consola:
fuente
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.
fuente