24
Set 08

Após adicionar os dois testes abaixo:


# este irá retornar falha, pq a assertion vai falhar.
def test_bam_zap_sock_pow
  batman = nil
  assert_not_nil batman
end

# este irá retornar erro, pq contém um metodo indefinido.
def test_uh_oh_hotdog
  assert_not_nil does_this_var_speak_korean
end

 

O resultado:

1. Started
2. F..E
3. Finished in 0.07 seconds.
4.
5.
1) Failure:
6. test_bam_zap_sock_pow(HelloTestCase) [/example/test.rb:62]:
7. <nil> expected to not be nil.
8.
9.
2) Error:
10. test_uh_oh_hotdog(HelloTestCase):
11. NameError: undefined local variable or method 'does_this_var_speak_korean' for
12. #<HelloTestCase:0x28c59a0> /example/test.rb:68:in 'test_uh_oh_hotdog'
13.

14.
4 tests, 12 assertions, 1 failures, 1 errors

Na linha 2, o F..E significa que Falhou, passou, passou, Erro. Se você prestar atenção, verá que a ordem apresentada no resultado não é a mesma em que você escreveu os testes. Isso porque os testes são ordenados por ordem alfabética. Então, se você adicionar os novos testes no começo ou no final do arquivo, o resultado acima será o mesmo!

 

Qual a diferença entre Erro e Falha?

  • Falha: Quando uma assertion dá errado, ou seja, as coisas não estão acontecendo como você espera que aconteça.
  • Erro: É um problema do Ruby. Pode ser um método não reconhecido, alguma coisa do tipo. Não tem a ver, diretamente, com o resultado da assertion.

Observação importante sobre Assertions:

 

Se o  teste encontrar uma assertion que falhou, então ele interrompe a execução daquele método inteiro que contém essa assertion e vai para o próximo método. Assim, se você tiver 5 assertions que irão falhar no mesmo método, na primeira vez ele só vai mostrar que a primeira assertion falhou. Aí se vc arrumar o código para que ela passe, ele vai mostrar que a segunda falhou e assim sucessivamente.

 


O Ciclo de Vida do Test Case

 

Até agora nós vimos que:

  • precisamos ter no inicio do arquivo de teste:  require ‘test/unit'

  • precisamos herdar da classe  Test::Unit::TestCase

  • o nome dos métodos devem iniciar com test

  • precisamos das assertions para checar nosso código

Quando rodamos um test case, um novo objeto é criado antes de rodar cada teste. Isso permite que o teste não tenha que se preocupar com o estado em que o outro teste deixou o objeto. O fluxo é o seguinte:

  • um objeto da classe MyTestCase é criado
  • o primeiro metodo de teste é executado
  • o objeto test case é destruído

Se houver outro método a ser executado, então ele cria outro objeto da classe, executa o método e depois destrói o objeto. Ou seja, um teste não interefe ou altera o resultado de outro.

 

Existem dois métodos especiais a serem tratados aqui: o setup e o teardown.

 

# chamado antes de cada teste
def setup
@name = 'jimmy'
@age = 150
end

# chamado depois de cada teste
def teardown
end

 

O método setup sempre é chamado imediatamente antes de cada método de teste. O método teardown é sempre chamado assim que termina o método de teste. Agora o fluxo pode ser entendido assim:

 

  • um objeto da classe  MyTestCase é criado

  • o método setup é executado

  • o primeiro método de teste é executado

  • o método teardown é executado

  • o objeto test case é destruído.

 

Se houver outro método a ser executado, então um novo objeto é criado, o método setup é executado, o próximo método de teste é executado, o método teardown é executado e então o objeto test case é destruído.

 

Ou seja, o método setup e teardown são uma espécie de contrutor e destrutor

 

Fonte: GuiaRails

publicado por dessa às 15:24
tags:

Setembro 2008
Dom
Seg
Ter
Qua
Qui
Sex
Sab

1
2
3
4
5
6

7
8
9
10
11
12
13

14
15
16
17
18
19
20

21
25
26

28
29
30


pesquisar
 
Subscrever por e-mail

A subscrição é anónima e gera, no máximo, um e-mail por dia.

blogs SAPO