Quais são as estruturas e ferramentas mais avançadas disponíveis para o python para praticar o Behavior Driven Development? Especialmente encontrar ferramentas semelhantes como rspec e mocha para ruby seria ótimo.
Flowp "permite escrever testes no estilo RSpec BDD com o mínimo de mágica".
Carl G
7
Somente no SO é altamente informativo igual "não construtivo".
precisa saber é o seguinte
Respostas:
38
Ian Bicking recomenda usar o doctest para o design orientado a comportamento:
Pessoalmente, costumo usar simulações de nariz e espaço vazio em um estilo de design orientado a comportamentos. Especificamente, o plugin de especificação para o nariz é excelente para o BDD.
Acho que o doctest realmente está mais alinhado com a filosofia do BDD, quando você o trata como pretendido: você começa a escrever sobre o software e depois o intercala com exemplos que também formam testes. Também foi descrito como "desenvolvimento orientado a documentos" - o objetivo é focar na funcionalidade descritiva externa, não nas unidades internas de trabalho. Eu acho que a tradição xUnit é horrível ao fazer isso.
Ianb 20/04
48
Alface significa ser uma ferramenta semelhante a pepino para python: http://lettuce.it/
Você pode acessar a fonte em github.com/gabrielfalcao/lettuce
Os usuários do Windows que consideram alface devem saber, no momento da redação deste artigo, que o suporte para esse sistema operacional não é simples.
leonigmig
7
Qualquer usuário que pretenda usar alface com o django deve estar ciente de que, por padrão, ele usa seu banco de dados padrão para teste. Essa interessante opção de design me custou um banco de dados de produção :(
Eu mudei para me comportar da alface quando seu comportamento padrão de usar o banco de dados padrão para teste em um projeto django me custou um banco de dados de produção em um servidor ativo :( Eu realmente gosto de me comportar; eu iniciei o projeto django-behave para conectá-lo ao framework de teste do django github.com/rwillmer/django-behave
Rachel
1
Sinto sua dor, também estou feliz em ver que seu sofrimento contribuiu para a prosperidade do ecossistema django. ;-)
John Wang
1
Posso usar o comportamento sem os arquivos de recursos? Como não tenho usuários não técnicos, escrevê-los é apenas um barulho para mim. Se alguém não pode ler meus testes de quando / quando / então eles não têm nenhum negócio lá.
precisa saber é o seguinte
29
Eu recomendo que você use um conjunto de ferramentas desenvolvidas para ajudar os programadores na prática do BDD e TDD. Este conjunto de ferramentas é composto por: pycukes , specloud , ludibrio e should-dsl .
O DSL deveria fornecer expectativas semelhantes ao RSpec. Tudo o que você pode fazer com a API de expectativa do RSpec, também deve-dsl. Você pode pegar a versão mais recente do Github .
O SpecLoud ajuda você a executar unittests do tipo BDD. Você pode instalá-lo fazendo
pip install specloud
Ludibrio é uma biblioteca para duplas de teste (Mocks, Stubs e Dummies). Instale-o via
pip install ludibrio
E PyCukes é a principal ferramenta para BDD. Ele executará os cenários, etc. Novamente,
pip install pycukes
Para mais informações, leia a documentação das ferramentas em PyPi .
Encontre este documento útil enquanto procura detalhes de sua resposta: arxiv.org/pdf/1007.1722
amit
Eu gosto de dsl. Eu estive considerando uma DSL para BDD python - existem alguns, este parece bastante expressivo.
Danny Staple
Não consigo encontrar nenhuma informação sobre um framework BDD chamado Pyramid. O link mencionado no artigo vinculado por @phaedrus leva a um site com aparência duvidosa que não tem nada a ver com testes e aponta para o Google Pyramid , a estrutura da web. Alguém pode fornecer um link atualizado?
@ BjörnPollex, o nome Pyramid não pôde ser usado por esses criadores de ferramentas por causa do Pyramid Web Framework. Agora eles são apenas ferramentas separadas.
Douglas Camata
11
Ótimo post e respostas. Só queria atualizar para incluir o Freshen nesta lista enquanto eu li pycukes descontinuado. Um bom post sobre o uso de BDD e Django com Freshen está aqui .
Parabens! Você me surpreendeu totalmente com o código em magic.py. Eu não tinha ideia de que "métodos de extensão" (classes abertas) eram possíveis no Python.
Mdwhatcott
8
O projeto Pyccuracy é um esforço para fornecer uma linguagem específica de domínio para o BDD no Python.
Diferentemente do doctest, que funciona no nível da API, ele codifica operações de nível superior, como carregar uma página da web e enviar um formulário. Eu não o usei, mas parece um pouco promissor se é isso que você está procurando.
Experimente pyspecs . Facilitar a leitura dos testes e executar constantemente durante o desenvolvimento foram dois dos meus principais objetivos na criação deste projeto.
Código do teste:
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)
Saída do console:
# 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)
Provavelmente estou perdendo completamente o objetivo, mas o que reti do documento original do BDD foi que o BDD foi apenas reembalado pelo TDD para enfatizar algumas das melhores práticas.
Se minha interpretação estiver correta, você poderá obter uma estrutura BDD apenas renomeando métodos em qualquer implementação xUnit . Então vá em frente e use a biblioteca padrão da unittest .
TDD é realmente a prática revolucionária em uma escala totalmente diferente da BDD. Ainda assim, eu apreciei a maneira de escrever com base em testes no estilo BDD.
JTR
1
BDD iniciado no nível da unidade, isso é verdade. Ele cresceu rapidamente para abranger o comportamento no nível do sistema, onde os contextos, eventos e resultados se beneficiam de um pouco mais de reutilização - daí a proliferação de ferramentas para suportar esse cenário e os de linguagem natural capturados em conversas com partes interessadas não técnicas. Desde que essa pergunta foi feita, elevamos o BDD ao nível de visão do projeto, usando a Injeção de recursos, com a mesma ênfase na descoberta por meio de conversação e linguagem de domínio. Ainda nada de novo sob o sol.
Lunivore 7/03
Eu gosto dessa conversa sobre o bdd youtube.com/watch?v=pherUEzdJow . Eu mostro uma boa maneira de escrever especificações e tê-las como testes.
Respostas:
Ian Bicking recomenda usar o doctest para o design orientado a comportamento:
Pessoalmente, costumo usar simulações de nariz e espaço vazio em um estilo de design orientado a comportamentos. Especificamente, o plugin de especificação para o nariz é excelente para o BDD.
fonte
Alface significa ser uma ferramenta semelhante a pepino para python: http://lettuce.it/
Você pode acessar a fonte em github.com/gabrielfalcao/lettuce
fonte
Eu realmente recomendo se comportar .
Procurando por um clone de pepino para Python, comecei a usar alface, mas achei uma réplica bastante desajeitada. Muito antitônico.
Então eu descobri o comportamento e fiquei muito feliz com isso.
fonte
Eu recomendo que você use um conjunto de ferramentas desenvolvidas para ajudar os programadores na prática do BDD e TDD. Este conjunto de ferramentas é composto por: pycukes , specloud , ludibrio e should-dsl .
O DSL deveria fornecer expectativas semelhantes ao RSpec. Tudo o que você pode fazer com a API de expectativa do RSpec, também deve-dsl. Você pode pegar a versão mais recente do Github .
O SpecLoud ajuda você a executar unittests do tipo BDD. Você pode instalá-lo fazendo
Ludibrio é uma biblioteca para duplas de teste (Mocks, Stubs e Dummies). Instale-o via
E PyCukes é a principal ferramenta para BDD. Ele executará os cenários, etc. Novamente,
Para mais informações, leia a documentação das ferramentas em PyPi .
fonte
Ótimo post e respostas. Só queria atualizar para incluir o Freshen nesta lista enquanto eu li pycukes descontinuado. Um bom post sobre o uso de BDD e Django com Freshen está aqui .
fonte
Você pode usar "sure" para afirmações expressivas (como no RSpec)
fonte
O projeto Pyccuracy é um esforço para fornecer uma linguagem específica de domínio para o BDD no Python.
Diferentemente do doctest, que funciona no nível da API, ele codifica operações de nível superior, como carregar uma página da web e enviar um formulário. Eu não o usei, mas parece um pouco promissor se é isso que você está procurando.
fonte
Eu gosto muito de Pyccuracy . Atualmente, estou implementando em um projeto de tamanho médio.
fonte
Experimente pyspecs . Facilitar a leitura dos testes e executar constantemente durante o desenvolvimento foram dois dos meus principais objetivos na criação deste projeto.
Código do teste:
Saída do console:
fonte
Provavelmente estou perdendo completamente o objetivo, mas o que reti do documento original do BDD foi que o BDD foi apenas reembalado pelo TDD para enfatizar algumas das melhores práticas.
Se minha interpretação estiver correta, você poderá obter uma estrutura BDD apenas renomeando métodos em qualquer implementação xUnit . Então vá em frente e use a biblioteca padrão da unittest .
EDIT: Um rápido google apareceu um módulo de comportamento na loja de queijo . Uma pesquisa mais aprofundada do BDD não encontrou mais nada.
fonte