Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testes Automatizados- Reduzindo os erros de man...

Testes Automatizados- Reduzindo os erros de manutenção no código

No início do aprendizado de programação utilizamos apenas testes manuais. Por muitas vezes esse procedimento de teste é mantido até o fim do curso e praticado em projetos do dia-a-dia. Projetos reais necessitam de alterações e melhorias constantes, testes manuais são insuficientes para permitir a agilidade e segurança de alteração do código ao programador. Hoje, testes automatizados são um padrão de excelência e profissionalismo com enormes benefícios para a longevidade de um projeto. Nessa palestra, nós vamos aprender sobre testes automatizados, as diferentes categorias existentes, além de ver exemplos práticos e os benefícios que eles trazem.

Ulisses Almeida

October 31, 2013
Tweet

More Decks by Ulisses Almeida

Other Decks in Programming

Transcript

  1. Como melhorar? • Automatizar os testes manuais • Um espaço

    no código fonte para escrever os testes • Uma forma padrão de escrever • Que seja simples de executar
  2. Ruby • Uma linguagem dinâmica, open source com foco na

    simplicidade e na produtividade. Tem uma sintaxe elegante de leitura natural e fácil escrita. https://www.ruby-lang.org/pt/
  3. TestUnit • Uma ferramenta de testes para ruby. • Segue

    o design xUnit criado por Kent Beck(XP e TDD)
  4. terminal ruby -I . conta_bancaria_test.rb [1/2] ContaBancariaTeste#test_deposita = 0.00 s

    1) Failure: ContaBancariaTeste#test_deposita [conta_bancaria_test.rb:10]: <100> expected but was <101>. 2 tests, 2 assertions, 1 failures, 0 errors, 0 skips
  5. Conta de Origem Saldo = 150 Transferência de R$ 50

    Conta de Destino Saldo = 200 Conta de Origem Saldo = 100 Conta de Destino Saldo = 250
  6. transferencia_test.rb def test_transferencia conta_origem = ContaBancaria.new(150) conta_destino = ContaBancaria.new(200) transferencia

    = Transferencia.new( conta_origem, conta_destino ) transferencia.transfere(50) assert_equal 100, conta_origem.saldo assert_equal 250, conta_destino.saldo end
  7. conta_bancaria.rb def saca(valor) if saldo >= valor @saldo = @saldo

    - valor else raise Exception, 'Saldo insuficiente' end end
  8. transferencia_test.rb def test_transferencia_origem_sem_saldo conta_origem = ContaBancaria.new(150) conta_destino = ContaBancaria.new(200) transferencia

    = Transferencia.new( conta_origem, conta_destino ) assert !transferencia.transfere(200) assert_equal 150, conta_origem.saldo assert_equal 200, conta_destino.saldo end
  9. The value returned by a Ruby method is the value

    of the last expression evaluated, so we can get rid of the return statement altogether. http://ruby-doc.com/docs/ProgrammingRuby/
  10. terminal ruby -I . conta_bancaria_test.rb 3 tests, 3 assertions, 0

    failures, 0 errors, 0 skips ruby -I . transferencia_test.rb 2 tests, 5 assertions, 0 failures, 0 errors, 0 skips
  11. Here we've defined three accessor methods to return the values

    of the three instance attributes. Because this is such a common idiom, Ruby provides a convenient shortcut: attr_reader creates these accessor methods for you. http://ruby-doc.com/docs/ProgrammingRuby/
  12. terminal ruby -I . conta_bancaria_test.rb 3 tests, 3 assertions, 0

    failures, 0 errors, 0 skips ruby -I . transferencia_test.rb 2 tests, 5 assertions, 0 failures, 0 errors, 0 skips
  13. É possível automatizar! visit root_path click_link 'Sign up' within('form') do

    fill_in 'Name', with: 'Billy' fill_in 'Email', with: '[email protected]' fill_in 'Password', with: 'strong_password' fill_in 'Confirm password', with: 'strong_password' click_button('Sign up!') end
  14. Cuidado • Devem ser mantidos com zelo • Não removem

    a necessidade de QA e testes manuais