Como começar no TDD com Ruby on Rails? [fechadas]

167

Eu estou familiarizado com os conceitos (fiz aulas de teste na faculdade), mas ainda não sei como usá-los, pois nunca trabalhei em um projeto TDD "real".

Estou prestes a iniciar o desenvolvimento de um projeto usando Ruby on Rails (provavelmente usando 2.3). Esta aplicação será usada para gerenciar dados, usuários e alguns arquivos. Não vai ser muito complicado no começo, mas pode escalar muito nos próximos 6 meses, então acho que este é o momento certo para aprofundar o TDD.

Eu tenho uma idéia básica de como fazê-lo, mas ainda preciso de algumas dicas e conselhos:

  • Que artigo sobre Ruby on Rails TDD 101 devo ler?

  • O que eu preciso para testar?

  • Qual jóia / plugin devo usar?

  • Devo usar o rspec ? Algo mais?

  • Depois de obter todas as minhas aulas de teste, como as implanto? (por exemplo: integração contínua)

  • Quanto tempo realmente consome TDD?

  • Preciso ler um livro sobre isso ou posso obter tudo apenas brincando com ele e lendo os tutoriais on-line? Se eu precisar ler um livro, que livro?


Eu gosto de aprender com exemplos. Alguém poderia me dizer como eu adotaria uma abordagem TDD para resolver esse problema:

Eu tenho empresas. Eu tenho contatos. Um contato pode ser vinculado a 1 empresa. Uma empresa pode ter vários contatos. Quero criar maneiras de criar contatos, empresas e vincular contatos a empresas.

Você não precisa usar este exemplo na sua resposta, mas ajudaria :)

marcgg
fonte

Respostas:

202

Que artigo sobre Ruby on Rails TDD 101 devo ler?

Iniciarei com um guia para testar aplicativos de trilhos .

Além disso, o Railscast possui excelentes screencasts sobre como usar diferentes ferramentas de teste.

O que eu preciso para testar?

Vou começar com os modelos, pois eles são fáceis de testar. A regra simples é que você precisa cobrir todas as declarações if em seu teste.

Você deve testar o objetivo do método (para garantir que ele esteja funcionando conforme o esperado), bem como todos os casos extremos.

Além disso, verifique se você não termina o teste.

Qual jóia / plugin devo usar? Devo usar o rspec? Algo mais?

Quando você começar, basta usar Test Unit. Você pode usar rspecou cucumberdepois de se familiarizar com o básico.

Autotesté uma boa ferramenta, se você deseja ser verdadeiramente testado. Mas é um 'bom' não é necessário.

Depois de obter todas as minhas classes de teste, como as implanto?

Não tenho certeza sobre a pergunta. Você não costuma implantar os testes. Depois de ter todas as suas classes de teste, digite 'rake test' para executar todos os seus testes.

Quanto tempo realmente consome TDD?

Isso economiza tempo realmente. Se você gosta de quebra-cabeças de labirinto, sabe que quase sempre é mais fácil resolvê-lo se for do início ao fim. Mesmo com TDD. Sem o Test Driven, você sempre pensa "o que devo fazer a seguir". Com o Test Driven, o teste dirá o que você deve fazer em seguida (ele quebra se a lógica não estiver lá, então você só precisa consertar a parte quebrada). Além disso, você tem menos bugs, o que economizará muito tempo a longo prazo.

Preciso ler um livro sobre isso ou posso obter tudo apenas brincando com ele e lendo os tutoriais on-line? Se eu precisar ler um livro, que livro?

Você não precisa de um livro. A maneira mais eficiente de aprender qualquer coisa é: basta fazê-lo. Volte ao livro ou aos recursos online depois de encontrar uma pergunta ou problema. Isso também é ágil.

No seu exemplo, as coisas que precisam de teste são: Um contato pode ser vinculado a 1 empresa, Uma empresa pode ter vários contatos, criar maneiras de criar contatos e vincular contatos a empresas.

class CompanyTest <Test::Unit
    def test_relationship # test associations/relationships
        c = companies(:some_company)
        assert_equal [a list of contacts], c.contacts # make sure a company can have multiple contacts
    end
end

class ContactTest<Test::Unit
   def  test_relationships
        c = contact(:some_contact)
        assert_equal some_company, c.company # make sure the contact link to 1 company
   end

   def  test_create/add
        # test create contacts, here you need to make sure the contact is created correctly, and linked to company correctly
   end
end
ez.
fonte
3
O link para o artigo está quebrado, mas o encontrou aqui: web.archive.org/web/20100325215651/http://bloritsch.d-haven.net/…
fivetwentysix
13

Eu produzi uma série de vídeos de 6 episódios que foi ministrada como uma aula pública em São Francisco no verão de 2010. O material cobre testes e eficiência do desenvolvedor no Rails 2.3 usando o RSpec 1.3. Ligeiramente datado, mas os principais conceitos se aplicam ao Rails 3 com Rspec 2.x

http://www.rubyfocus.biz/class_video/2010/07/19/19/rails_tdd_class_1.html

Wolfram Arnold
fonte
5

TDD é tudo sobre como escrever testes primeiro. Isso basicamente obriga a escrever seu próprio cliente antes de escrever o código do aplicativo. O ciclo geralmente é escrever um teste para uma API que não existe, executar o teste esperando que falhe, escrever seu código de API, executar seu teste novamente e garantir que ele seja aprovado. Então escreva seu próximo teste ... e assim por diante.

Você também pode estar interessado neste guia do Rails .

Andy Gaskell
fonte
3

Qual jóia / plugin devo usar?

Eu sempre gostei de deveria .

Quanto tempo realmente consome TDD?

A razão pela qual sempre favoreci o desenvolvimento do TDD é que ele se concentra em como implementarei um trecho de código específico. Tenho uma sensação anedótica de que, sempre que aderir mais fortemente aos princípios do TDD, passo menos tempo retrabalhando depois. A quantidade de tempo gasto está em quão bem você escreve testes de unidade. Se os testes de unidade não capturarem o comportamento esperado, todo o tempo gasto neles será desperdiçado.

Patrick Robertson
fonte