Pepino vs RSpec (histórias sobre RSpec) [fechado]

136

Quando devo usar especificações para a aplicação Rails e quando Pepino (ex-rspec-stories)? Sei como funcionam e ativamente usam especificações, é claro. Mas ainda parece estranho usar o Pepino. Minha visão atual sobre isso é que é conveniente usar o Pepino quando você está implementando um aplicativo para o cliente e não entende como todo o sistema deve funcionar ainda.

Mas e se eu estiver fazendo meu próprio projeto? Na maior parte do tempo, sei como as partes do sistema interagem. Tudo o que preciso fazer é escrever vários testes de unidade. Quais são as possíveis situações em que eu precisaria do Pepino?

E, como uma segunda pergunta correspondente: eu tenho que escrever especificações se escrever histórias de pepino? Não seria um teste duplo da mesma coisa?

snitko
fonte
12
Como é que cada única [Fechado] pergunta que me deparo é fechada como "não construtiva" por Bill o lagarto e, ao mesmo tempo, a questão é upvoted muitas vezes!?! o que estou perdendo ?
Ashkan Kh. Nazary
4
Eu concordo totalmente. Ainda estou muito confuso sobre onde postar perguntas como "qual é a melhor prática para fazer XXX".
Dean
3
Concordo, me deparo com boas perguntas com respostas perspicazes e úteis o tempo todo no SO que foram fechadas por um motivo ou outro.
Russell Silva
Encontrei essa pergunta em 2017 porque ainda é relevante e ainda é uma ótima pergunta, com ótimas respostas. Também não convida a opinião, pois as estruturas em questão foram projetadas principalmente pelas mesmas pessoas para duas preocupações completamente separadas ... mas você precisaria de um pouco de conhecimento para saber disso.
Lunivore 28/11

Respostas:

114

Se você ainda não o fez, pode conferir o excelente artigo de Dan North, O que há em uma história? como ponto de partida.

Temos dois usos principais para histórias de pepino. Primeiro, porque a forma da história é muito específica, ajuda a concentrar a articulação do proprietário do produto dos recursos que ele deseja criar. Esse é o uso "de token para uma conversa" de histórias e seria valioso se implementássemos ou não as histórias no código. Segundo, quando o processo está funcionando bem o suficiente para termos histórias completas antes de começarmos a escrever o artigo (mais um ideal pelo qual nos esforçamos do que uma realidade cotidiana), você tem seus critérios de aceitação claramente e sabe exatamente o que e como muito para construir.

Em nosso trabalho com o Rails, as histórias de pepino não substituem os testes de unidade rspec. Os dois vão de mãos dadas. Na prática, os testes de unidade tendem a impulsionar o desenvolvimento dos modelos e controladores, e as histórias tendem a impulsionar o desenvolvimento das visualizações (tendemos a não escrever rspec para nossas visualizações) e a fornecer um bom teste do aplicativo como um todo. perspectiva do usuário.

Se você trabalha sozinho, o aspecto da comunicação pode não ser tão interessante para você, mas o teste de integração que você obtém do Cucumber pode ser. Se você tirar proveito do webrat , escrever Pepino pode ser rápido e fácil para muitas das suas funcionalidades básicas.

Abie
fonte
6
Você está confundindo duas questões separadas; 1) é bom fazer testes de integração e aceitação e 2) é um pepino uma boa ferramenta para escrever esses testes. Para 1 - sim, é claramente uma boa idéia. Para 2, raramente é mais eficiente para uma equipe de desenvolvimento escrever testes em uma linguagem com tanta indireção, quando você pode escrever testes de integração e aceitação muito legíveis no rspec e na capivara (ou - se Deus não permitir que possamos investigar a biblioteca padrão do Ruby - test / unidade ou miniteste, junto com a capivara). Veja o post ao qual Jack Kinsella vincula abaixo.
Graham Ashton
Concordo totalmente com você Abie! A integração do pepino é vital!
dpapadopoulos 21/01/19
26

Pense nisso como um ciclo:

Escreva o recurso Pepino e, ao desenvolver as peças para esse recurso, escreva especificações para completar os componentes individuais. Continue preenchendo as especificações até que você tenha escrito funcionalidade suficiente para o recurso passar e, em seguida, escreva o próximo recurso.

Josiah Kiehl
fonte
1
Há um exemplo muito bom do ciclo BDD de fora para dentro .
Rdamborsky
21

Minha opinião é que é uma má idéia usar o Pepino na maioria das situações devido aos custos de produtividade que sua sintaxe incorre em você. Eu escrevi extensivamente sobre o tópico em Por que se preocupar com testes de pepino?

Jack Kinsella
fonte
1
Eu li o seu artigo e, como fã de pepino, devo dizer que concordo com muitos pontos que você cita no seu artigo. Embora eu ainda pense que o pepino é uma boa maneira de formalizar testes e torná-los facilmente legíveis para quem está de fora.
huug
1
Jack - post fantástico. Muito obrigado por escrevê-lo, você me salvou o trabalho de fazer isso sozinho.
Graham Ashton
3
huug - Pode ser uma boa maneira de expor os testes a "estranhos", mas você me mostra um membro não técnico da equipe que deseja ler os testes e mostrarei uma equipe que está desperdiçando seu orçamento. Além disso, ainda estou trabalhando com um membro não técnico de um projeto que gostaria de perder tempo lendo testes. Eu não sei, talvez eu tenho sorte ...
Graham Ashton
Votado. Acho que descrever os recursos do usuário nos termos do usuário é útil para mim, como desenvolvedor, independentemente de os usuários lerem minhas histórias de pepino. É por isso que uso o Pepino em todos os meus projetos e incentivo outras pessoas a fazer o mesmo.
Marnen Laibow-Koser
8

Uma história de pepino é mais uma descrição do problema geral que sua aplicação está resolvendo, e não se bits individuais de código funcionam (por exemplo, testes de unidade).

Como Abie descreve, é quase uma lista de requisitos que o aplicativo deve atender e é muito útil para a comunicação com seu cliente, além de ser diretamente testável.

Dave Glassborow
fonte
2
Exatamente. Pepino descreve o uso do seu aplicativo. Por exemplo, "clico aqui e espero obter esse ou aquele resultado". As especificações estão mais no nível 'modelo'. Por exemplo, quando chamo esses métodos com esses parâmetros, espero que retorne esse resultado.
Ariejan 09/09/09
6

Atualmente, você pode usar o rspec com o Capybara e o Selenium Webdriver e evitar criar e manter todos os analisadores de histórias do Pepino. Aqui está o que eu recomendaria:

  1. Escreva sua história
  2. Usando o RSpec, eu criaria um teste de integração ex: spec / integrations / socks_rspec.rb
  3. Então eu criaria um teste de integração que inclui uma nova descrição e bloqueia para cada cenário
  4. Em seguida, implementaria a funcionalidade mínima necessária para obter o teste de integração e, ao voltar mais fundo (em controladores e modelos, etc.), TDD em controladores e modelos.
  5. À medida que você volta, seu teste de integração deve passar e você pode continuar adicionando etapas ao teste de integração
  6. repetir

Uma coisa a ser observada, no entanto, é que os testes de controlador e integração se sobrepõem, o que pode não ser necessário; portanto, você deve usar seu bom senso para não perder seu tempo.

Além disso, depois de encontrar o seu ritmo, você achará mais agradável desenvolver usando o BDD, até então não se sentirá culpado se não sentir que está fazendo o perfeito e não pensar demais. Você vai se sair bem!

PeppyHeppy
fonte
2

Mas e se eu estiver fazendo meu próprio projeto? Na maior parte do tempo, sei como as partes do sistema interagem. Tudo o que preciso fazer é escrever vários testes de unidade. Quais são as possíveis situações em que eu precisaria do Pepino?

Você ainda precisa de pepino. Você precisa documentar como vê o sistema funcionando, e para garantir que não tenha quebrado a funcionalidade ao alterar as coisas.

Em outras palavras, você precisa de histórias de pepino pelas mesmas razões que de testes de unidade - elas apenas funcionam em um nível mais alto de abstração.

Marnen Laibow-Koser
fonte
2
Eu não diria que o Pepino era essencial, mas você certamente deveria ter algum tipo de teste de integração, pois os testes de unidade são normalmente usados ​​apenas para testar as classes isoladamente.
Andy Waite
1
Certo. E, na maioria dos casos, o pepino é a melhor maneira de escrever testes de integração.
Marnen Laibow-Koser 17/05/11