A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Testes de Unidade Usando JUnit

Apresentações semelhantes


Apresentação em tema: "Testes de Unidade Usando JUnit"— Transcrição da apresentação:

1 Testes de Unidade Usando JUnit

2 Primeiro Exemplo (1/2) import junit.framework.TestCase; /**
* Testes de unidade para a classe Pessoa} */ public class TestPessoa extends TestCase { * Um teste de unidade para verificar se o nome está * formatado corretamente public void testObterNomeCompleto() { Pessoa p = new Pessoa(“Fulano”, “Tal”); assertEquals(“Fulano Tal”, p.getNomeCompleto()); }

3 Primeiro Exemplo (2/2) /**
* Um teste de unidade para verificar se os nulos são * tratados corretamente */ public void testNomeEhNulo() { Pessoa p = new Pessoa(null, “Tal”); assertEquals(“? Tal”, p.getNomeCompleto()); // Este código só é executado se passar pelo // assertEquals anterior. p = new Pessoa(“Fulano”, null); assertEquals(“Fulano ?”, p.getNomeCompleto()); }

4 Executando JUnit Teste com falhas
java –cp junit.jar;. junit.textui.TestRunner TestPessoa .F.F Time: 0.02 There were 2 failures: 1) testObterNomeCompleto(TestPessoa)junit.framework.AssertionFailedError: expected:<Fulano Tal> but was:<FulanoTal> at TestPessoa.testObterNomeCompleto(TestPessoa.java:14) 2) testNomeEhNulo(TestPessoa)junit.framework. AssertionFailedError: expected:<? Tal> but was:<?Tal> at TestPessoa.testNomeEhNulo(TestPessoa.java:22) FAILURES!!! Tests run: 2, Failures: 2, Errors: 0

5 Executando JUnit Depois de corrigir os erros da classe Pessoa
java –cp junit.jar;. junit.textui.TestRunner TestPessoa .. Time: 0.01 OK (2 tests)

6 Usando o Ambiente Gráfico
java –cp junit.jar;. junit.swingui.TestRunner TestPessoa

7 Resumo dos Métodos Assert
Descrição Teste passa se assertEquals(a,b) Compara dois valores a.equals(b) assertFalse(a) Avalia uma expressão booleana a == false assertTrue(a) a == true assertNotNull(a) Compara uma variável com nulo a != null assertNull(a) a == null assertNotSame(a,b) Compara dois objetos a == b assertSame(a,b) a != b fail() Causa uma falha no teste atual

8 Usando os Métodos Assert
Sintaxe assertEquals(valorEsperado, valorTestado); assertEquals(“Mensagem indicando o que deveria ocorrer”, valorEsperado, valorTestado); Exemplo Pessoa p = new Pessoa(“Fulano”, “Tal”); assertEquals( “Deveria haver um espaço entre os nomes”, “Fulano Tal”, p.getNomeCompleto());

9 Exemplo: Jogo da Velha public class Velha { public Velha(){}
public char getGanhador(){} public boolean getFim(){} public void setMarcacao(int posicao){} public void voltar(){} public char[] getMarcacao(){} public char getJogadorVez(){} public void iniciar(){} } /** * Esqueleto da classe do Jogo da Velha Leonardo Lucena 1.0 */ public class Velha { * Construtor da classe Velha public Velha(){ } * Verifica quem é o ganhador um char indicando se alguém ganhou o jogo: * * 'X' se o jogador X venceu, 'O' se o jogador 'O' venceu e '_' se * ninguem venceu public char getGanhador(){ return '_'; * Verifica se o jogo terminou true se, e somente se, o jogo terminou public boolean getFim(){ return false; * Marca uma posição no jogo da velha posicao posição para ser marcada public void setMarcacao(int posicao){ * Volta uma jogada public void voltar(){ * Devolve um array de char contendo as nove posições do jogo um array de char contendo as nove posições do jogo public char[] getMarcacao(){ return null; * Indica qual o jogado da vez um char indicando o jogador da vez 'X', 'O' ou '_' public char getJogadorVez(){ * Inicia ou reinicia o jogo public void iniciar(){

10 Testando o Jogo da Velha (1/3)
import junit.framework.TestCase; /** * Teste de Unidade para a classe Velha}. */ public class TesteVelha extends TestCase { * Teste de unidade para verificar se o jogador da vez está * correto após uma jogada. public void testPassarVez(){ Velha jogo = new Velha(); jogo.setMarcacao(0); char jogadorAntes = jogo.getJogadorVez(); jogo.setMarcacao(3); char jogadorDepois = jogo.getJogadorVez(); assertNotSame("O jogador da vez deve mudar após cada jogada", jogadorAntes, jogadorDepois); } import junit.framework.TestCase; /** * Teste de Unidade para a classe Velha}. */ public class TesteVelha extends TestCase { * Um teste de unidade para verificar se o jogador da vez está correto * após voltar uma jogada. public void testPassarVez(){ Velha jogo = new Velha(); this.jogo.setMarcacao(0); this.jogo.setMarcacao(1); this.jogo.setMarcacao(2); char jogadorAntes = jogo.getJogadorVez(); jogo.setMarcacao(3); char jogadorDepois = jogo.getJogadorVez(); assertNotSame("O jogador da vez deve mudar após cada jogada", jogadorAntes, jogadorDepois); } * Um teste de unidade para verificar se o jogo não chegou ao fim public void testNaoFim(){ boolean situacao = jogo.getFim(); assertFalse("O jogo só deve chegar ao fim quando alguém ganhar ou "+ "quando todas as posições estiverem preenchidas", situacao); * Um teste de unidade para verificar se é possível alterar uma marcação public void testAlterarMarcacao(){ String marcacaoAntes = new String(jogo.getMarcacao()); jogo.setMarcacao(2); String marcacaoDepois = new String(jogo.getMarcacao()); assertEquals("Não deve ser permitido marcar uma posição já marcada", marcacaoAntes, marcacaoDepois); * Um teste de unidade para verificar se o jogo terminou empatado public void testFimJogoEmpate(){ jogo.setMarcacao(4); jogo.setMarcacao(5); jogo.setMarcacao(6); jogo.setMarcacao(7); jogo.setMarcacao(8); boolean fim = jogo.getFim(); assertTrue("O jogo deveria estar terminado quando todas as posições"+ " estivessem marcadas", fim); * Um teste de unidade para verificar se o jogo terminou com vitória public void testFimJogoVitoria(){ char ganhador = jogo.getGanhador(); assertEquals("O jogo não está indicando o ganhador correto", ganhador, jogo.getMarcacao()[1]); * Um teste de unidade para verificar se é possível marcar após o final do jogo public void testMarcacaoAposFim(){ String marcacaoAntes = new String (jogo.getMarcacao()); String marcacaoDepois = new String (jogo.getMarcacao()); assertEquals("Não deve ser permitido fazer uma nova marcação após o "+ "final do jogo", marcacaoAntes, marcacaoDepois); * Um teste de unidade para verificar se é possível marcar uma posição * fora da faixa public void testMarcacaoInvalida(){ jogo.setMarcacao(-1); jogo.setMarcacao(10); * Um teste de unidade para verificar se a tentativa de marcar uma posição * já marcada implica na alteração do jogador da vez public void testAlterarMarcacaoJogador(){ assertEquals("O jogador da vez só deveria mudar quando uma marcação "+ "nova for feita", jogadorAntes, jogadorDepois); * Um teste de unidade para verificar a marcação do jogo public void testMarcacao(){ String marcacao = new String(jogo.getMarcacao()); assertTrue("Após três jogadas a marcação não está correta", marcacao.equals("XOX______") || marcacao.equals("OXO______")); * Um teste de unidade para verificar se o jogo reinicia corretamente public void testReiniciar(){ jogo.iniciar(); String vazio = "_________"; assertEquals("Quando o jogo for iniciado a marcação deve voltar ao " + "estado inicial", marcacao, vazio);

11 Testando o Jogo da Velha (2/3)
/** * Teste de unidade para verificar se o jogo não chegou ao fim */ public void testNaoFim(){ String msg = "O jogo só deve chegar ao fim quando alguém " + "ganhar ou quando todas as posições “ + "estiverem preenchidas“; Velha jogo = new Velha(); assertFalse(msg, jogo.getFim()); jogo.setMarcacao(0); jogo.setMarcacao(1); jogo.setMarcacao(2); jogo.setMarcacao(3); }

12 Testando o Jogo da Velha (3/3)
/** * Teste de unidade para verificar se é possível marcar uma * posição fora da faixa */ public void testMarcacaoInvalida(){ jogo.setMarcacao(-1); jogo.setMarcacao(10); } Verifica se a classe Velha é robusta. Se alguma exceção for gerada o JUnit exibe uma mensagem de falha.

13 Granularidade dos Testes
Cada teste deve verificar um pedaço específico da funcionalidade Não combine testes não relacionados em um único método testXXX() Se o primeiro teste falhar os seguintes não serão executados

14 Métodos setUp() e tearDown()
Agrupam código de iniciação e de finalização usados por todos os casos de teste Seqüência de execução do JUnit: Cria uma instância da classe de teste para cada método de teste. (Exemplo: 5 testes, 5 instâncias). Para cada instância: Chama o método setUp(); Chama o método de teste; Chama o método tearDown();

15 Usando setUp() import junit.framework.TestCase;
public class TesteVelha extends TestCase { private Velha jogo; public void setUp() { jogo = new Velha(); jogo.setMarcacao(0); jogo.setMarcacao(1);jogo.setMarcacao(2); } public void testPassarVez(){ char jogadorAntes = jogo.getJogadorVez(); jogo.setMarcacao(3); char jogadorDepois = jogo.getJogadorVez(); assertNotSame("O jogador da vez deve mudar após cada jogada", jogadorAntes, jogadorDepois); public void testNaoFim(){ String msg = "O jogo só deve chegar ao fim quando alguém ..." assertFalse(msg, jogo.getFim()); import junit.framework.TestCase; /** * Teste de Unidade para a classe Velha}. */ public class TesteVelha extends TestCase { * Um teste de unidade para verificar se o jogador da vez está correto * após voltar uma jogada. public void testPassarVez(){ Velha jogo = new Velha(); this.jogo.setMarcacao(0); this.jogo.setMarcacao(1); this.jogo.setMarcacao(2); char jogadorAntes = jogo.getJogadorVez(); jogo.setMarcacao(3); char jogadorDepois = jogo.getJogadorVez(); assertNotSame("O jogador da vez deve mudar após cada jogada", jogadorAntes, jogadorDepois); } * Um teste de unidade para verificar se o jogo não chegou ao fim public void testNaoFim(){ boolean situacao = jogo.getFim(); assertFalse("O jogo só deve chegar ao fim quando alguém ganhar ou "+ "quando todas as posições estiverem preenchidas", situacao); * Um teste de unidade para verificar se é possível alterar uma marcação public void testAlterarMarcacao(){ String marcacaoAntes = new String(jogo.getMarcacao()); jogo.setMarcacao(2); String marcacaoDepois = new String(jogo.getMarcacao()); assertEquals("Não deve ser permitido marcar uma posição já marcada", marcacaoAntes, marcacaoDepois); * Um teste de unidade para verificar se o jogo terminou empatado public void testFimJogoEmpate(){ jogo.setMarcacao(4); jogo.setMarcacao(5); jogo.setMarcacao(6); jogo.setMarcacao(7); jogo.setMarcacao(8); boolean fim = jogo.getFim(); assertTrue("O jogo deveria estar terminado quando todas as posições"+ " estivessem marcadas", fim); * Um teste de unidade para verificar se o jogo terminou com vitória public void testFimJogoVitoria(){ char ganhador = jogo.getGanhador(); assertEquals("O jogo não está indicando o ganhador correto", ganhador, jogo.getMarcacao()[1]); * Um teste de unidade para verificar se é possível marcar após o final do jogo public void testMarcacaoAposFim(){ String marcacaoAntes = new String (jogo.getMarcacao()); String marcacaoDepois = new String (jogo.getMarcacao()); assertEquals("Não deve ser permitido fazer uma nova marcação após o "+ "final do jogo", marcacaoAntes, marcacaoDepois); * Um teste de unidade para verificar se é possível marcar uma posição * fora da faixa public void testMarcacaoInvalida(){ jogo.setMarcacao(-1); jogo.setMarcacao(10); * Um teste de unidade para verificar se a tentativa de marcar uma posição * já marcada implica na alteração do jogador da vez public void testAlterarMarcacaoJogador(){ assertEquals("O jogador da vez só deveria mudar quando uma marcação "+ "nova for feita", jogadorAntes, jogadorDepois); * Um teste de unidade para verificar a marcação do jogo public void testMarcacao(){ String marcacao = new String(jogo.getMarcacao()); assertTrue("Após três jogadas a marcação não está correta", marcacao.equals("XOX______") || marcacao.equals("OXO______")); * Um teste de unidade para verificar se o jogo reinicia corretamente public void testReiniciar(){ jogo.iniciar(); String vazio = "_________"; assertEquals("Quando o jogo for iniciado a marcação deve voltar ao " + "estado inicial", marcacao, vazio);


Carregar ppt "Testes de Unidade Usando JUnit"

Apresentações semelhantes


Anúncios Google