Na aula 1, ao chegar na etapa que envolve salvar leilões no banco de dados, o sistema eclipse não consegue executar o código pois ocorre uma exceção que acredito que seja de conexão com banco de dados.
Na aula 1, ao chegar na etapa que envolve salvar leilões no banco de dados, o sistema eclipse não consegue executar o código pois ocorre uma exceção que acredito que seja de conexão com banco de dados.
Oi Giovani,
Posta aqui qual exception que aconteceu e o código da classe que deu o problema?
Abraço!
Olá, segue a exception:
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at br.com.caelum.leilao.infra.dao.LeilaoDao.(LeilaoDao.java:27) at br.com.caelum.leilao.servico.EncerradorDeLeilaoTest.DeveEncerrarLeilaoQueComecaramUmaSemanaAntes(EncerradorDeLeilaoTest.java:22) 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 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:343) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2308) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:774) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:49) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at br.com.caelum.leilao.infra.dao.LeilaoDao.(LeilaoDao.java:24) ... 24 more Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.(Unknown Source) at java.net.Socket.(Unknown Source) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:292) ... 38 more
esse é o código da classe que deu problema:
package br.com.caelum.leilao.servico;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Calendar;
import org.junit.Test;
import br.com.caelum.leilao.builder.CriadorDeLeilao;
import br.com.caelum.leilao.dominio.Leilao;
import br.com.caelum.leilao.infra.dao.LeilaoDao;
public class EncerradorDeLeilaoTest {
@Test
public void DeveEncerrarLeilaoQueComecaramUmaSemanaAntes() {
Calendar antiga = Calendar.getInstance();
antiga.set(1999, 1, 20);
Leilao leilao1 = new CriadorDeLeilao().para("TV de Plasma").naData(antiga).constroi();
Leilao leilao2 = new CriadorDeLeilao().para("Geladeira").naData(antiga).constroi();
LeilaoDao dao = new LeilaoDao();
dao.salva(leilao1);
dao.salva(leilao2);
EncerradorDeLeilao encerrador = new EncerradorDeLeilao();
encerrador.encerra();
List<Leilao> encerrados = dao.encerrados();
assertEquals(2, encerrados.size());
assertTrue(encerrados.get(0).isEncerrado());
assertTrue(encerrados.get(1).isEncerrado());
}
}
Oi Giovani,
Esse erro é por conta de vc não ter instalado/configurado o banco MYSQL na sua maquina, mas não se preocupe em instalar, pois esse é mais um cenário de interversão da classe DAO no seu teste.
Ao invés de instalar e manipular o bando de dados para a execução dos testes, deve-se mockar os DAO, que vc irá ver a seguir no curso, mas segue o exemplo abaixo.
@Test
public void deveGerarPagamentoParaLeilaoEncerrado() {
// aqui é feito os mocks dos daos
RepositorioDeLeiloes leiloes = mock(RepositorioDeLeiloes.class);
RepositorioDePagamentos pagamentos = mock(RepositorioDePagamentos.class);
Leilao leilao = new CriadorDeLeilao().para("Playstation")
.lance(new Usuario("Jose da Silva"), 2000.0)
.lance(new Usuario("Maria Pereira"), 2500.0)
.constroi();
// aqui é passado o comportamento esperado para o mock
when(leiloes.encerrados()).thenReturn(Arrays.asList(leilao));
GeradorDePagamento gerador = new GeradorDePagamento(leiloes, pagamentos, new Avaliador());
gerador.gera();
ArgumentCaptor<Pagamento> argumento = ArgumentCaptor.forClass(Pagamento.class);
verify(pagamentos).salva(argumento.capture());
Pagamento pagamentoGerado = argumento.getValue();
assertEquals(2500.0, pagamentoGerado.getValor(), 0.00001);
}
Espero ter ajudado :)