pango
Março 5, 2009, 10:05am
#1
Pessoal,
Estou desenvolvendo uns teste utilizando JUnit e EasyMock, mas tem um determinado método que está dando erro. Aqui está o código de teste:
String sql;
Date data;
JDBCConnectionManager connectionManager;
final Connection conn;
PreparedStatement statement;
ResultSet rs;
FeriadosDAO feriadosDAO;
Collection<Feriado> feriados;
try{
sql = JDBCProperties.SELECT_FERIADOS.getProperty();
data = new Date();
connectionManager = createMock(JDBCConnectionManager.class);
conn = createMock(Connection.class);
statement = createMock(PreparedStatement.class);
rs = createMock(ResultSet.class);
expect(connectionManager.getRiscoConnection()).andReturn(conn);
expect(conn.prepareStatement(sql)).andReturn(statement);
expect(statement.executeQuery()).andReturn(rs);
expect(rs.next()).andReturn(false);
feriadosDAO = new FeriadosDAOJDBC(connectionManager);
feriados = feriadosDAO.getFeriados(data, data);
assertTrue(feriados.isEmpty());
}
catch(DAOException exception){
fail("DAOException lançada!");
}
catch(SQLException exception){
fail("SQLException lançada!");
}
E este é o código que está sendo testado:
Collection<Feriado> feriados;
String sql;
Connection conn;
PreparedStatement statement;
ResultSet rs;
feriados = new ArrayList<Feriado>();
sql = JDBCProperties.SELECT_FERIADOS.getProperty();
try{
conn = connectionManager.getRiscoConnection();
statement = conn.prepareStatement(sql);
statement.setDate(1, new java.sql.Date(dataInicial.getTime()));
statement.setDate(2, new java.sql.Date(dataFinal.getTime()));
rs = statement.executeQuery();
while(rs.next()){
feriados.add(new Feriado(rs.getDate("DATAFER")));
}
rs.close();
statement.close();
return feriados;
}
catch(SQLException exception){
throw new DAOException(exception);
}
Quando executo o teste, ele falha dizendo que o objeto conn é nulo, e eu não estou entendendo, porque ele está sendo fornecido pelo mock do JDBCConnectionManager. O que estou fazendo de errado?
lavh
Março 5, 2009, 10:42am
#2
[quote=pango]Pessoal,
Estou desenvolvendo uns teste utilizando JUnit e EasyMock, mas tem um determinado método que está dando erro. Aqui está o código de teste:
String sql;
Date data;
JDBCConnectionManager connectionManager;
final Connection conn;
PreparedStatement statement;
ResultSet rs;
FeriadosDAO feriadosDAO;
Collection<Feriado> feriados;
try{
sql = JDBCProperties.SELECT_FERIADOS.getProperty();
data = new Date();
connectionManager = createMock(JDBCConnectionManager.class);
conn = createMock(Connection.class);
statement = createMock(PreparedStatement.class);
rs = createMock(ResultSet.class);
expect(connectionManager.getRiscoConnection()).andReturn(conn);
expect(conn.prepareStatement(sql)).andReturn(statement);
expect(statement.executeQuery()).andReturn(rs);
expect(rs.next()).andReturn(false);
feriadosDAO = new FeriadosDAOJDBC(connectionManager);
feriados = feriadosDAO.getFeriados(data, data);
assertTrue(feriados.isEmpty());
}
catch(DAOException exception){
fail("DAOException lançada!");
}
catch(SQLException exception){
fail("SQLException lançada!");
}
E este é o código que está sendo testado:
Collection<Feriado> feriados;
String sql;
Connection conn;
PreparedStatement statement;
ResultSet rs;
feriados = new ArrayList<Feriado>();
sql = JDBCProperties.SELECT_FERIADOS.getProperty();
try{
conn = connectionManager.getRiscoConnection();
statement = conn.prepareStatement(sql);
statement.setDate(1, new java.sql.Date(dataInicial.getTime()));
statement.setDate(2, new java.sql.Date(dataFinal.getTime()));
rs = statement.executeQuery();
while(rs.next()){
feriados.add(new Feriado(rs.getDate("DATAFER")));
}
rs.close();
statement.close();
return feriados;
}
catch(SQLException exception){
throw new DAOException(exception);
}
Quando executo o teste, ele falha dizendo que o objeto conn é nulo, e eu não estou entendendo, porque ele está sendo fornecido pelo mock do JDBCConnectionManager. O que estou fazendo de errado?[/quote]
Acho que tá faltando o replay() nas classes mockadas.
lavh
Março 5, 2009, 10:43am
#3
Sugestão: Se você está testando pra decidir qual mockador usar, não deixe de experimentar esse: http://www.mockito.org/
É o melhor na minha opinião!
pango
Março 5, 2009, 11:15am
#4
lavh ,
Era isso mesmo mesmo, cara. Eu postei a mensagem aqui no GUJ e saí pra almoçar. No meio do almoço, a “lampadazinha” acendeu na minha cabeça. Por isso que é bom dar uma “voada” quando você não está conseguindo resolver um problema.
Um abraço!