opa!
Estou tentando aprender a usar o EasyMock para poder criar testes de unitários criando os objetos mocks para as dependências, e estou tendo dificuldade para entender uma situação, veja:
No meu código que vai ser testado eu tenho duas chamadas a objetos que foram criados mocks e apenas com eles pelo menos o método de teste passa, ,mas tenho ainda, dentro desse método a criação de um objeto DTO que criaria uma mensagem, deixando a parte que cria e define os campos do DTO
public void enviar(final EMail eMail, final Enviador enviador)
throws AutenticacaoException_Exception,
ValidacaoException_Exception {
final Configuracao configuracao = configuracaoModel.get();
final MensagemDTO mensagemDTO = new MensagemDTO();
mensagemDTO.setContaEnvio(configuracao.getIdConta());
mensagemDTO.setDataHoraEnvio(null);
mensagemDTO.setTexto(eMail.getConteudoMensagem());
mensagemDTO.setTitulo(eMail.getTitulo());
enviador.agendarMensagem(MarketingUtil.getAutenticacao(configuracao),
mensagemDTO);
}
Classe que testa a parte acima:
[code]public class MailerMockTest extends TestCase {
private Enviador enviadorMock;
private ConfiguracaoModel configuracaoModel;
public MailerMockTest() {
super();
}
private Configuracao getConfiguracao() {
Configuracao configuracao = new Configuracao();
configuracao.setSenhaMkt("sss");
configuracao.setUsuarioMkt(1l);
configuracao.setUrlWebServiceMkt("http://localhost:8080/mkt");
configuracao.setIdConta(1);
configuracao.setListaDiscussao("Fiel");
return configuracao;
}
private EMail getDomain() {
EMail email = new EMail();
email.setId(1);
email.setPara("wes@terra.com.br");
email.setTitulo("Titulo");
return email;
}
@Override
protected void setUp() throws Exception {
super.setUp();
enviadorMock = EasyMock.createMock(Enviador.class);
configuracaoModel = EasyMock.createMock(ConfiguracaoModel.class);
}
public void testCriaEnviaMail() throws AutenticacaoException_Exception,
ValidacaoException_Exception, MalformedURLException {
EasyMock.expect(configuracaoModel.get()).andReturn(getConfiguracao());
final MensagemDTO mensagemDTO = new MensagemDTO();
mensagemDTO.setContaEnvio(getConfiguracao().getIdConta());
mensagemDTO.setDataHoraEnvio(null);
mensagemDTO.setTexto(getDomain().getConteudoMensagem());
mensagemDTO.setTitulo(getDomain().getTitulo());
EasyMock.expect(enviadorMock.agendarMensagem(
new AutenticacaoEmpresaDTO(), mensagemDTO));
EasyMock.replay(enviadorMock, configuracaoModel);
MailerService mailer = new MailerService();
mailer.setConfiguracaoModel(configuracaoModel);
mailer.enviar(getDomain(), enviadorMock);
EasyMock.verify(enviadorMock, configuracaoModel);
}
}[/code]
Reparem que ela não entende parte precede a chamada a agendarMensagem como um comportamento esperado (mesmo eu achando que defini corretamente, o que nao deve ser verdade), alguém sabe como definir o comportamento para criar objetos dentro de um método?
java.lang.IllegalStateException: missing behavior definition for the preceding method call agendarMensagem(br.com.ultramax.mkt.ws.AutenticacaoEmpresaDTO@1833955, br.com.ultramax.mkt.ws.MensagemDTO@291aff)
at org.easymock.internal.MocksControl.replay(MocksControl.java:174)
at org.easymock.EasyMock.replay(EasyMock.java:1970)
at br.com.ultramax.gestaoescolar.core.mail.test.unit.model.MailerMockTest.testCriaEnviaMail(MailerMockTest.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)