Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Mockar ou não mockar. Eis a questão!

No description
by

Geovanny Ribeiro

on 21 August 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Mockar ou não mockar. Eis a questão!

Mockar ou não mockar? Eis a questão!
Mocking Frameworks
Nos permitem testar o código que desejamos sem suas respectivas dependências. Em um teste unitário os mock objects podem simular o comportamento de objetos complexos que são impossíveis de incorporar à um teste unitário.
Mockito
Exemplo Básico
//imports omitidos

public class TrocaPedidoTest {

@Test(expected = Exception.class)
public void deveOcorrerErroQuandoTentarTrocarPedidoCancelado() throws Exception {
try {
// Crio um mock para a minha interface de acesso a dados de pedido
PedidoDao pedidoDao = mock(PedidoDao.class);

// especifico o comportamento do mock
Pedido pedido = new Pedido();
pedido.setStatus(StatusPedido.CANCELADO);

// Aqui utilizo o Mockito para para retornar o pedido acima quando o método "obter"
//for chamado para o id 777
doReturn(pedido).when(pedidoDao).obter(new Long(777));

TrocaPedido trocaPedido = new TrocaPedido(pedidoDao);
trocaPedido.trocar(new Long(777));
} catch (Exception e) {
assertTrue(e.getMessage().contains("Não é permitido realizar troca de um pedido cancelado"));
throw e;
}
}
}
O Mockito é um framework que facilita a criação de mock objects de forma que os testes fiquem simples e legíveis. A definição que o site do Mockito da para ele é a seguinte:

Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produce clean verification errors
public class Pedido {

private StatusPedido status;

public void setStatus(StatusPedido status) {
this.status = status;
}

public StatusPedido getStatus() {
return status;
}

}

public enum StatusPedido {
CANCELADO;
}


public interface PedidoDao {
Pedido obter(Long codigo);
}


public class TrocaPedido {

private PedidoDao pedidoDao;

public TrocaPedido(PedidoDao pedidoDao) {
this.pedidoDao = pedidoDao;
}

public void trocar(Long codigoPedido) throws Exception {
Pedido pedido = pedidoDao.obter(codigoPedido);
if (StatusPedido.CANCELADO == pedido.getStatus()) {
throw new Exception("Não permitido realizatroca de um pedido cancelado");
}
}
}

Como vamos saber se o método que obtém o pedido funciona?

Aí sim devemos fazer os testes de integração. Mas é bom lembrar que um sistema deve possuir poucos testes de integração se comparados a testes unitários.
Aceitação - 10%
Integração - 20%
Unitários - 70%
Afinal de contas ...
Limitações
Não podemos mockar:

Classes final;
Métodos estáticos;
Métodos final (O comportamento real deles é executado sem qualquer exceção. O Mockito não consegue avisá-lo da tentativa de mockar métodos final, portanto fique atento!);
equals(), hashCode().
Boas práticas:
http://mestachs.wordpress.com/2012/07/09/mockito-best-practices/
http://mestachs.wordpress.com/tag/sonar/
https://github.com/alexruiz/fest-assert-2.x/wiki/One-minute-starting-guide
Full transcript