September 23rd, 2008 by
Eduardo Fiorezi
Jay Fields anunciou em seu blog que o livro Refactoring: Ruby Edition está a venda na loja virtual Safari. Para quem já leu a versão antiga em Java, esta obra dispensa apresentações, eu recomendo a todos que gostam de código bem escrito.
Os autores dos livros são Jay Fields, Shane Harvie, Martin Fowler e com a participação de Kent Beck.
Posted in Ruby, livros, Refactoring, TDD, Geral |
1 Comment »
September 2nd, 2007 by
Eduardo Fiorezi
Nas minhas aplicações Rails eu costumo utilizar o plugin “Restful Authentication” que disponibiliza um código inicial para criar usuários e o esqueleto de autenticação. (Veja como utilizar)
O ponto principal na escolha deste plugin é a alta cobertura de testes de unidade e funcionais, assim posso inserir novas funcionalidades com segurança e mantendo a cobertura de testes.
Os testes gerados pelo plugin utilizam o helper assert_difference e o assert_no_difference presente somente no “edge rails”. Felizmente o plugin sofreu algumas alterações e já possui no seu helper de testes esses dois métodos. Então se você utilizou o plugin antes dessa modificação, ou já quer usar este helper antes do Rails 2.0 ser lançado, basta adicionar o seguinte código no test_helper:
def assert_difference(expressions, difference = 1, message = nil, &block)
expression_evaluations = [expressions].flatten.collect{|expression| lambda { eval(expression, block.binding) } }
original_values = expression_evaluations.inject([]) { |memo, expression| memo << expression.call }
yield
expression_evaluations.each_with_index do |expression, i|
assert_equal original_values[i] + difference, expression.call, message
end
end
def assert_no_difference(expressions, message = nil, &block)
assert_difference expressions, 0, message, &block
end
Sua utilização é simples, se antes você tinha esse código:
def test_create_player
old_count = Player.count
post :create, :player => {:name => "Eduardo", :game => "Starcraft 2"}
assert_response :redirect
assert_equal old_count + 1, Player.count
end
Você agora pode utilizar este que é muito mais bonito:
def test_create_player
assert_difference 'Player.count' do
post :create, :player => {:name => "Eduardo", :game => "Starcraft 2"}
assert_response :redirect
end
end
O Artur publicou um artigo com mais alguns helpers que ele utiliza.
Fica ai a dica.
Posted in Ruby, Refactoring, Rails, TDD |
2 Comments »
April 20th, 2007 by
Eduardo Fiorezi
Desenvolvedor, Test Driven Development foi feito para que você se sinta o melhor profissional do mundo, porque? Basicamente porque ele te faz ser inútil.(OMG)
Você talvez se pegue tentando andar de costas no começo, dando piruetas e entrando em parafuso para aprender a desenvolver com TDD. Isso é necessário para que você perceba que tudo que você aprendeu até hoje pode ser feito diferente. Se você insistir, talvez consiga se desacoplar do projeto que está trabalhando, é o grande momento que você passa a criar uma teia de segurança para ficar inútil e descartável.
Ser inútil é ótimo, você tem a liberdade de criar, tem a vantagem de apertar um botãozinho e ver tudo que planejou funcionando perfeitamente, isso é motivador e te dá um certo ar de arrogância(espero que em vocês também) de saber que seu código é o melhor, porque ele funciona da maneira que você quer e como imaginou.
Após todo esse momento de criação procurando manter as janelas a salvo, você chega ao ápice da sensação de conforto quando precisa fazer qualquer modificação no seu código. Talvez você precise mover esses códigos divinos para outra parte do sistema e você se sente muito mais inútil quando roda novamente seus testes e após pequenos ajustes tudo funciona perfeitamente.
Ainda não acabou, agora você pode ser dar ao luxo de brincar com esse código, torná-lo bonito, rápido e independente. Agora você está refatorando e pode fazer qualquer mutação no seu código, porque tdd te deu todo o controle.
Parabéns, agora você atingiu o ápice, você é um completo inútil neste projeto e já pode partir para outro sem se preocupar com algum bug, se ele aparecer você irá corrigi-lo com mais um teste e alguns minutos de codificação. Esse é o segredo de manter a mente tranqüila e motivada para criar tecnologia enquanto você é desenvolvedor de software.
Posted in TDD |
18 Comments »