quarta-feira, 16 de fevereiro de 2011

Testando ao Sabor do Mockito

mockito drink

O objeto mock simula o comportamento. Sendo que, na simulação do comportamento do CRUD Bairro, utilizarei o framework mockito que permite escrever testes limpos e simples. Segundo o site do mockito, os testes poderão ser feitos tranqüilamente, sem medo de ressaca. Então, vamos saborear o drink teste.

Interface DAO:

public interface BairroDAO {

public boolean criar(Bairro b);

public boolean deletar(Long id);

public boolean atualizar(String nome, Long id);

public Bairro load(Long id);

}

Importante: A implementação da classe DAO é feita com hibernate, como estou simulando o comportamento através do objeto mock, esta classe não realizará as transações no banco de dados.

Classe que implementa o serviço do CRUD Bairro:

public class BairroService {

private BairroDAO bairroDAO;

public void setBairroDAO(BairroDAO bairroDAO) {

this.bairroDAO = bairroDAO;

}

public boolean criar(Bairro b) {

return bairroDAO.criar(b);

}

public boolean deletar(Long id) {

return bairroDAO.deletar(id);

}

public boolean atualizar(String nome, Long id) {

return bairroDAO.atualizar(nome, id);

}

public Bairro load(Long id) {

return bairroDAO.load(id);

}

}

 

Classe de teste mock. Testando serviços como criar, deletar e load(carregar):

import junit.framework.Assert;

import junit.framework.TestCase;

import org.junit.Before;

import org.junit.Test;

import org.mockito.Mockito;

public class TestBairroMock extends TestCase {

private BairroService bairroService = new BairroService();

private BairroDAO bairroDAO;

@Before

public void setUp() throws Exception {

bairroDAO = Mockito.mock(BairroDAO.class);

bairroService.setBairroDAO(bairroDAO);

}

@Test

public void testCriar() throws Exception {

Bairro b = new Bairro();

b.setNome("Infelicidade");

//Quando for chamado o serviço criar retornará o valor booleano

Mockito.when(bairroDAO.criar(b)).thenReturn(true);

/ / chama o serviço que deseja testar

boolean result = bairroService.criar(b);

//Verifica se o serviço foi chamado

Mockito.verify(bairroDAO).criar(b);

/ / verifica se valor <true> foi devolvido como resultado

Assert.assertTrue(result);

}

@Test

public void testLoadBairroInfelicidade() throws Exception {

Bairro b = new Bairro();

b.setNome("Infelicidade");

b.setId(new Long(54));

Mockito.when(bairroDAO.load(new Long(54))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(54));

Mockito.verify(bairroDAO).load(new Long(54));

Assert.assertEquals(b.getNome(), b2.getNome());

}

@Test

public void testLoadBairroCristoRedentor() throws Exception {

Bairro b = new Bairro();

b.setNome("cristo redentor");

b.setId(new Long(53));

Mockito.when(bairroDAO.load(new Long(53))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(53));

Mockito.verify(bairroDAO).load(new Long(53));

Assert.assertEquals(b.getNome(), b2.getNome());

}

@Test

public void testLoadBairroCristoRedentorNull() throws Exception{

Bairro b = new Bairro();

b.setNome("cristo redentor");

b.setId(new Long(53));

Mockito.when(bairroDAO.load(new Long(53))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(53));

Mockito.verify(bairroDAO).load(new Long(53));

Assert.assertNull(b2);

}

@Test

public void testAtualizar() throws Exception {

Mockito.when(bairroDAO.atualizar("Deus", new Long(53)))

.thenReturn(true);

boolean result = bairroService.atualizar("Deus", new Long(53));

Mockito.verify(bairroDAO).atualizar("Deus", new Long(53));

Assert.assertTrue(result);

}

@Test

public void testLoadBairroDeus() throws Exception {

Bairro b = new Bairro();

b.setNome("Deus");

b.setId(new Long(53));

Mockito.when(bairroDAO.load(new Long(53))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(53));

Mockito.verify(bairroDAO).load(new Long(53));

Assert.assertEquals(b.getNome(), b2.getNome());

}

@Test

public void testLoadNull() throws Exception {

Bairro b = null;

Mockito.when(bairroDAO.load(new Long(1000))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(1000));

Mockito.verify(bairroDAO).load(new Long(1000));

Assert.assertNull(b);

}

@Test

public void testLoadNotNull() throws Exception {

Bairro b = null;

Mockito.when(bairroDAO.load(new Long(1000))).thenReturn(b);

Bairro b2 = bairroService.load(new Long(1000));

Mockito.verify(bairroDAO).load(new Long(1000));

Assert.assertNotNull(b);

}

}

Resultado no JUnit 4.7:

mockito

Note que testLoadBairroCristoRedentorNull e testLoadNotNull quebraram. E estão marcados em azul.

A versão do mockito é a 1.8.5, baixar no site: http://mockito.org/

build

Usei o mockito com JUnit 4.7.

Fonte:

Mockito: Java Unit Testing with Mock Objects by Jacek Furmankiewicz:

http://www.developer.com/print.php/3882311 

http://mockito.org/

Ta-ta for now

Um comentário:

  1. CursuriAuto.ro îti pune la dispozitie zeci de chestionare auto generate din mii de întrebari din legislatia rutiera pentru toate categoriile principale de conducere.

    ResponderExcluir