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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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 :)