Pergunta

Duas partes com uma introdução rápida.Introdução:Estou vindo do Perl para Ruby e estou um pouco perdido entre as opções de estrutura de teste.Eu entendo que provavelmente não existe um único e completo melhor escolha, mas não consigo nem ter uma ideia clara do campo de jogo.

Então, primeiro, MiniTest ou Test::Unit?Acabei de perceber que o padrão 1.9.1 é MiniTest agora.Eu não tinha notado, já que todos os tutoriais mais antigos do Test::Unit ainda funcionam bem.Se você require test/unit, você realmente obtém o MiniTest como um emulador Test::Unit (!).Meu pensamento inicial foi escolher a opção padrão de MiniTest (uma vez que soube que ele estava lá), mas mesmo livros muito recentes não parecem interessados ​​em ensiná-lo. Melhores práticas de Ruby diz “Existem diferenças significativas” entre os dois, mas opta por não lidar com elas.Ele também executa todos os seus testes via Test::Unit (além de alguns complementos personalizados).A nova Picareta também tem muito pouco sobre o MiniTest por si só, e no capítulo sobre testes eles também usam a versão de emulação Test::Unit do MiniTest.Para esclarecer minha primeira pergunta então:o MiniTest é uma primeira opção ruim?Devo usar o emulador Test::Unit como padrão?

Em segundo lugar, além das opções integradas, existem Rspec, Cucumber & Company para testes orientados por comportamento.A comunidade está fortemente inclinada para este estilo e esta estrutura?Devo começar com Rspec?

Vou brincar um pouco com todos os três, mas estou curioso para saber que tipo de consenso (se houver) está se formando em torno dos testes no Ruby 1.9.

(Um rápido acompanhamento, como um lembrete para mim e para qualquer pessoa interessada.Ver esse link para uma visão geral útil das diferentes invocações para Test::Unit e MiniTest nos vários Rubies 1.8 a 1.9.1.)

Foi útil?

Solução

Existe consenso?Eu diria que não.Há uma forte voz da comunidade para o uso de TDD/BDD, mas mesmo assim não é universal.A estrutura é provavelmente menos importante do que aplicar a prática em primeiro lugar.

Acredito que o minitest seja o substituto 1.9 do Test::Unit, que existe apenas como um wrapper da nova biblioteca para compatibilidade com versões anteriores.Eu acho que seguir o caminho específico do miniteste seria mais prospectivo.

RSpec é uma abordagem um pouco diferente:menos obviamente infundido pelas estruturas "tradicionais" influenciadas pelo xUnit.Vale a pena passar um tempo para ver se você prefere.

Há também Deveria ter.embora eu não saiba como foi testado no 1.9:é mais um wrapper/extensão para Test::Unit, então provavelmente funcionará.

Claro que a diversão não para por aí:depois de escolher uma estrutura de teste, você vai querer algum tipo de mecanismo de simulação.Ou uma substituição de dispositivo de dados.

Em todos os casos, eu diria que qualquer estrutura para a qual você possa encontrar evidências de atualizações regulares, uma comunidade aberta e populosa e uma API que você não odeia fará o trabalho.É improvável que você seja abatido mais tarde por ter feito qualquer escolha que fez.

Outras dicas

Uso o Rspec há mais ou menos um ano.Mudei de Test::Unit especificamente porque pude imprimir de forma legível por humanos o que está sendo testado.

Parece prosa.O que é uma grande vantagem para mim.Mas como acontece com tudo, os resultados variam.

describe Model do
  it "should do what I want" do
    this.should == that
    it.should be_nil
    that.should_not be_true
  end
end 

Além disso, independentemente da estrutura de teste, você também deve pensar em uma ferramenta de cobertura como RCov.Ele se integra ao rspec e informa onde falta teste em seu código.

RSpec é o consenso de livros populares sobre Rails como "The Rails Way".Prós IMHO são testes que se parecem com o inglês, formatos de saída que se parecem com o inglês e correspondências instantâneas.Os contras são a velocidade lenta e a biblioteca às vezes parece "mágica", ou seja,muito estranho para programadores que estão mais familiarizados com Ruby e testes unitários.RSpec também oferece Cucumber e Gherkin, que são maneiras de escrever histórias de usuários que são úteis para aceitação do cliente.

O MiniTest está integrado ao Ruby 1.9.Os profissionais IMHO são rápidos, muito fáceis de ler/escrever para codificadores de outras linguagens e testes que usam praticamente o mesmo estilo de código que você usaria em seu código real.O MiniTest tem muito mais do que a maioria das pessoas sabe, por exemplo, o MiniTest Spec possui matchers BDD semelhantes ao RSpec, o MiniTest Mock é um sistema de simulação e o MiniTest Benchmark é para criação de perfil de desempenho.

Na minha experiência pessoal, as pessoas que constroem aplicativos Rails tendem para o RSpec, e as pessoas que constroem código Ruby puro tendem para MiniTest Unit, Spec, Mock, Benchmark e assim por diante.

Eu pessoalmente prefiro o rspec.Descobri que concentrar meus testes no comportamento realmente me ajudou a contornar o que estava tentando fazer.

Com o rspec, pegue algo como Factory Girl ou Machinist para gerar seus dados de teste, não use fixtures.

Com relação ao que Mike disse, o projeto rspec está bastante ativo com novas versões sendo lançadas normalmente com cada versão do Rails para ajudá-lo a acompanhar o desenvolvimento do framework.

RSpec é legal, mas acho que recentemente tem havido muita conversa e movimento por trás Miniteste que vem com Ruby 1.9.x.Ele tem muitas das sutilezas do RSpec, mas é muito mais enxuto e conciso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top