3. Testes unitários!
O que são ?
Testes que verificam uma parte específica do código,
geralmente funções, em um ambiente orientado a objetos são
testados os comportamento das classes. O objetivo do teste
unitário é assegurar que cada unidade está funcionando de
acordo como deveria.
Os teste unitários, quando bem escritos, servem como uma
forma de documentação das funcionalidades do sistema.
4. Testes unitários!
Definindo a classe alvo - Game
class Game
## Define o get e o setter ao atributo "players"
attr_accessor :players
!
## Construtor
def initialize(players = [‘Terrorista’])
@players = players
end
end
5. Testes unitários!
Definindo a classe teste - TestGame
require_relative ‘Game'
class TestGame
## Testa se o número de players é 1 quando iniciada a classe
def test_have_1_player_on_create
@game = Game.new
if @game.players.size == 1
return true
else
return false
end
end
end
6. Testes unitários!
Definindo a classe teste - TestGame
require_relative ‘Game'
class TestGame
## Testa se o número de players é 1 quando iniciada a classe
def test_have_1_player_on_create
@game = Game.new
if @game.players.size == 1
return true ## Se é 1 returna true, passou no teste
else
return false ## Se não retorna false, falhou no teste
end
end
end
7. Testes unitários!
Definindo a classe teste - TestGame
require_relative ‘Game'
class TestGame
## Testa se o número de players é 1 quando iniciada a classe
def test_have_1_player_on_create
@game = Game.new
if @game.players.size == 1
return true
else
return false
end
end
end
Cria objeto
Game
Verifica se o atributo
players tem tamanho 1
Se sim retorna true
Se não retorna false
8. Testes unitários!
Testando
## Instancia da classe TestGame
@test = TestGame.new
!
## Executa o método "test_have_1_player_on_create"
@test.test_have_1_player_on_create()
## retorna true, passou no teste
!
## Porque ?
!
def initialize(players = [‘Terrorista’]) ## players tem 1 elemento, o 'Terrorista'
@players = players
end
9. Testes unitários!
Alterando o construtor e executando novamente:
## Altera o construtor para iniciar com o Array players vazio
def initialize(players = [])
@players = players
end
!
## Rodamos o teste novamente:
@test = TestGame.new
@test.test_have_1_player_on_create()
## => false, não passou no teste
10. Testes unitários!
Resumo
Criamos a classe Game que inicializa com 1 player,o Terrorista,
então escrevemos o teste para nos assegurar disso.
11. Testes unitários!
TDD (Desenvolvimento orientado a testes)
O TDD é uma metodologia de desenvolvimento em que
primeiro são escritos os testes unitários(de classes), e depois é
escrito o código em si, as classes e suas funções.
A principal vantagem do TDD é que ele facilita o rastreamento
do erro caso uma mudança ocasione um problema.
12. No exemplo codificamos nessa ordem:
Game.rb
TestGame.rb
No TDD:
Game.rb
TestGame.rb
Testes unitários!
13. Exemplo em C#, métodos soma e multiplicação
Testes unitários!
namespace calculadora
{
public class Calculadora
{
int soma(int i, int j)
{
return i + j;
}
int multiplicacao(int i, int j)
{
return i * j;
}
}
}
14. Teste da função de multiplicação:
Testes unitários!
public void multiplicacaoTest()
{
Calculadora_Accessor target = new Calculadora_Accessor();
int i = 50;
int j = 2;
int expected = 100;
int actual;
actual = target.divisao(i, j);
Assert.AreEqual(expected, actual);
}
15. Teste da função de soma
Testes unitários!
public void somaTest()
{
Calculadora_Accessor target = new Calculadora_Accessor();
int i = 50;
int j = 2;
int expected = 52;
int actual;
actual = target.divisao(i, j);
Assert.AreEqual(expected, actual);
}
16. O 3 passos dos testes unitários!
!
1 - Criar a classe alvo e seus métodos
!
2 - Criar a classe teste e o teste de todos os métodos da classe alvo
!
3 - Executar os testes e checar se todos estão funcionando
corretamente, isto é, retornando verdadeiro.
!
OBS: No TDD primeiro os passos 2 e 1 são invertidos
Testes unitários!