Praticando BDD com python [fechado]

133

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.

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

Ryan
fonte
7
Andrew Bennetts escreveu recentemente um post sobre o motivo pelo qual ele acha que os testes de documentos são abusados. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
DDAA
4
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

user333958
fonte
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 :(
Rachel
3
Existem algumas alternativas para a alface também, como o comportamento; aqui está uma postagem no blog comparando-os e defendendo o comportamento .
Driftcatcher
1
Obrigado @seafangs - O Comportamento parece muito gerenciável para projetos grandes do que a Alface.
jamesc
Se você estiver usando o django, poupe algum tempo usando o Lettuce, a versão atual 2.19 não funciona com o django mais recente.
James Lin
46

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.

Gregário
fonte
11
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 .

Douglas Camata
fonte
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örn Pollex
1
Eu prefiro a certeza DSL asserção.
fatuhoku 02/09
@ 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 .

Steve
fonte
9

Você pode usar "sure" para afirmações expressivas (como no RSpec)

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


fonte
6

Eu gosto muito de Pyccuracy . Atualmente, estou implementando em um projeto de tamanho médio.

Refael Ackermann
fonte
3
Eu estaria interessado em qualquer comparação recente entre Pyccuracy e Lettuce que qualquer um pudesse compartilhar.
Michela
Talvez inclua Freshen (vinculado na resposta acima) também na comparação.
amit
Já perguntei aqui: quora.com/…
amit
6

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

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

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.

ddaa
fonte
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.
aisbaa