Curva de aprendizado muito superficial (mesmo para desenvolvedores não-Groovy)
Integração DBUnit extremamente poderosa
Aparentemente, não há suporte para parâmetros (leva a histórias muito vagas ou duplicação entre texto e código (editar: na verdade, existe apenas a documentação para isso, estava muito bem oculta).
A história e o código estão muito bem acoplados (mesmo arquivo)
Saída de relatório muito básica
Não foi possível obter o plugin IntelliJ para funcionar
Comunidade inativa (o plug-in Maven parece ter sido quebrado por três meses - não há muitos exemplos de código para usar)
JDave ruim : vem com fósforos e zombarias, bom : última atividade Jan 2011, licença ASF
easyb ruim : última atividade Out 2010, não tenho certeza : ele usa Groovy. Isso pode ser bom, mas seria um problema para adoção no meu caso.
beanspec ruim : apenas uma versão em 2007, isso está morto
bdoc ruim : última atividade Jan 2010, não tenho certeza : parece que está indo para o outro lado, criando um relatório a partir do código.
spock ruim : talvez um pouco extremo, essa é uma estrutura de teste completa, não apenas BDD, boa : muito ativa, muito legal.
jbehave , a "mãe" de todos os BDD em Java, ruim : muito poderosa = licença complexa e incompatível (para mim), vem com quase todas as bibliotecas de teste e muito mais, boa : baseada no RSpec e, portanto, compatível, plugins eclipse, integração maven comunidade muito ativa
ginkgo4j , uma estrutura BDD para Java também baseada no Ruby RSpec, mas usando Java lambda (em vez de anotações) para permitir que você crie testes altamente contextuais e altamente legíveis. Simples. Muito poderoso. Licença Apache 2 de código aberto.
Em relação às zombarias: Você definitivamente precisa de uma estrutura de zombaria também. As estruturas do BDD apenas ajudam você a escrever as especificações, mas alguns testes precisarão de zombarias ou stubs, esp. quando você projeta de cima para baixo (da visão geral aos detalhes).
Eu encontrei alguns deles aqui, mas não tenho certeza de qual escolher.
Realmente, olhe para o mencionado acima.
Faz sentido usar uma estrutura de BDD se eu já uso uma biblioteca de simulação (por exemplo, Mockito)?
Resposta curta: sim, definitivamente. Na verdade, o teste de aceitação usando uma estrutura BDD e o teste de unidade isoladamente usando objetos simulados são tão diferentes que eu realmente não entendi a pergunta. O teste de aceitação é um teste de caixa preta, testes são usados para verificar se um recurso de negócios está funcionando e são idealmente escritos pelo analista de negócios. Testes de unidade isolados usando zombarias são testes de caixa branca, testes são usados para verificar se uma unidade está funcionando e são gravados pelos desenvolvedores. Ambos são úteis, mas têm propósitos totalmente diferentes. Em outras palavras, o uso do Mockito não substitui a estrutura do BDD e o inverso também é verdadeiro.
O que você disse não está errado, mas isso não significa que você não pode escrever seus testes de unidade em um estilo mais compatível com BDD. Não especificação por exemplo, mas também não é um recurso inútil. docs.mockito.googlecode.com/hg/org/mockito/BDDMockito.html
cwash
7
Originalmente, eu fiz meu BDD com jUnit simples, mas tenho observado o JDave recentemente porque é quase 1: 1 para o que eu estava fazendo com o jUnit. Ele também roda sobre o jUnit, portanto, ele já funciona no Eclipse e também é fácil de configurar para funcionar em sistemas de integração contínua, como o Hudson. Não posso compará-lo com outros, mas minhas experiências com o JDave foram boas até agora.
Ah, e nunca é uma idéia estúpida usar zombarias! Eles não estão ligados especificamente ao TDD / BDD, seu objetivo é aliviar o fardo dos testes em geral.
Uau, vejo que o assunto é quente, muitas boas respostas ...
Ironia à parte, descobri recentemente o BDD e achei o conceito interessante. Ei, obriga a escrever ambos os testes ... e especificações! Por mais surpreendente que possa parecer, o último também pode estar ausente em alguns projetos ... Ou apenas na falta da precisão que o BDD força a introduzir.
O artigo Behavior Driven Development resume o conceito e os links para alguns bons artigos (como o de Andrew Glover). Além disso, para o tópico deste encadeamento, ele fornece uma lista bastante abrangente (suponho) das estruturas BDD, um bom número delas para Java.
Não resolve o problema de escolher a estrutura, mas pelo menos facilitará a pesquisa ...
Como o BDD depende muito da legibilidade do código de teste, suponho que um bom critério de escolha seja examinar os tours / tutoriais rápidos e ver qual deles parece mais adequado ao seu estilo. Outros critérios podem ser o fato de uma estrutura alavancar ferramentas com as quais você está familiarizado (teste de unidade, zombaria), uso com o IDE e assim por diante.
Eu tentei o Cucumber-JVM (anteriormente desenvolvido como Cuke4Duke). Ele usa o Gherkin DSL para especificação, armazenado como texto sem formatação.
Pode ser executado como um teste JUnit. Portanto, o único problema para começar a usá-lo é fazer com que pessoas de negócios ou gerente de produto leiam / gravem .features em Fontes.
Minha equipe usa o JBehave há algum tempo. Ele usa arquivos de texto sem formatação para armazenar especificações. Cada etapa (Dado, Quando, Então) é então executada por um determinado método que pode extrair parâmetros da etapa. Os cenários podem ser recuados e bem formatados, o que ajuda muito se os clientes quiserem verificá-los.
Existem alguns problemas também. Mudamos para o Java 6. Às vezes, algumas etapas do cenário são ignoradas durante a execução. Pode causar muitos problemas para descobrir onde está o erro.
@ Boris O seu problema pode ser que as etapas PENDENTES contam como aprovação (o comportamento padrão) em vez de falhar? Se esse for o seu problema, você pode configurar a PendingErrorStrategy: jarvana.com/jarvana/view/org/jbehave/jbehave-core/2.2.1/…
JeffH
3
Minha equipe usou o JBehave com êxito - passamos a ele depois de usar o EasyB e achamos os arquivos de cenário de texto sem formatação mais fáceis de lidar.
Respostas:
Acabei de comparar três estruturas de BDD para Java. Obviamente, minhas descobertas têm uma data de validade bastante curta.
Concordion
EasyB
JBehave
Não tive a chance de experimentar o Cuke4Duke do JDave como gostaria, mas provavelmente vou pressionar o JBehave no momento.
fonte
"prós e contras" podem ser coisas diferentes para pessoas diferentes. Eu geralmente dou uma olhada
E de alguns frameworks eu dei uma olhada
Em relação às zombarias: Você definitivamente precisa de uma estrutura de zombaria também. As estruturas do BDD apenas ajudam você a escrever as especificações, mas alguns testes precisarão de zombarias ou stubs, esp. quando você projeta de cima para baixo (da visão geral aos detalhes).
fonte
Aqui está um link interessante sobre Concordion vs. Pepino e Java baseado em testes de aceitação
Realmente, olhe para o mencionado acima.
Resposta curta: sim, definitivamente. Na verdade, o teste de aceitação usando uma estrutura BDD e o teste de unidade isoladamente usando objetos simulados são tão diferentes que eu realmente não entendi a pergunta. O teste de aceitação é um teste de caixa preta, testes são usados para verificar se um recurso de negócios está funcionando e são idealmente escritos pelo analista de negócios. Testes de unidade isolados usando zombarias são testes de caixa branca, testes são usados para verificar se uma unidade está funcionando e são gravados pelos desenvolvedores. Ambos são úteis, mas têm propósitos totalmente diferentes. Em outras palavras, o uso do Mockito não substitui a estrutura do BDD e o inverso também é verdadeiro.
fonte
Originalmente, eu fiz meu BDD com jUnit simples, mas tenho observado o JDave recentemente porque é quase 1: 1 para o que eu estava fazendo com o jUnit. Ele também roda sobre o jUnit, portanto, ele já funciona no Eclipse e também é fácil de configurar para funcionar em sistemas de integração contínua, como o Hudson. Não posso compará-lo com outros, mas minhas experiências com o JDave foram boas até agora.
Ah, e nunca é uma idéia estúpida usar zombarias! Eles não estão ligados especificamente ao TDD / BDD, seu objetivo é aliviar o fardo dos testes em geral.
fonte
Uau, vejo que o assunto é quente, muitas boas respostas ...
Ironia à parte, descobri recentemente o BDD e achei o conceito interessante. Ei, obriga a escrever ambos os testes ... e especificações! Por mais surpreendente que possa parecer, o último também pode estar ausente em alguns projetos ... Ou apenas na falta da precisão que o BDD força a introduzir.
O artigo Behavior Driven Development resume o conceito e os links para alguns bons artigos (como o de Andrew Glover). Além disso, para o tópico deste encadeamento, ele fornece uma lista bastante abrangente (suponho) das estruturas BDD, um bom número delas para Java.
Não resolve o problema de escolher a estrutura, mas pelo menos facilitará a pesquisa ...
Como o BDD depende muito da legibilidade do código de teste, suponho que um bom critério de escolha seja examinar os tours / tutoriais rápidos e ver qual deles parece mais adequado ao seu estilo. Outros critérios podem ser o fato de uma estrutura alavancar ferramentas com as quais você está familiarizado (teste de unidade, zombaria), uso com o IDE e assim por diante.
fonte
Eu tentei o Cucumber-JVM (anteriormente desenvolvido como Cuke4Duke). Ele usa o Gherkin DSL para especificação, armazenado como texto sem formatação.
Pode ser executado como um teste JUnit. Portanto, o único problema para começar a usá-lo é fazer com que pessoas de negócios ou gerente de produto leiam / gravem .features em Fontes.
Resultados
fonte
Minha equipe usa o JBehave há algum tempo. Ele usa arquivos de texto sem formatação para armazenar especificações. Cada etapa (Dado, Quando, Então) é então executada por um determinado método que pode extrair parâmetros da etapa. Os cenários podem ser recuados e bem formatados, o que ajuda muito se os clientes quiserem verificá-los.
Existem alguns problemas também. Mudamos para o Java 6. Às vezes, algumas etapas do cenário são ignoradas durante a execução. Pode causar muitos problemas para descobrir onde está o erro.
fonte
Minha equipe usou o JBehave com êxito - passamos a ele depois de usar o EasyB e achamos os arquivos de cenário de texto sem formatação mais fáceis de lidar.
fonte