Por favor me ajudem a utilizar o EasyMock!

0 respostas
jittobr

Olá,
Li a documentação do EasyMock e alguns exemplos que encontrei no Google, mas mesmo assim não consegui fazer funcionar meus testes.
Segue abaixo um resumo das minhas classes que tentei testar.
Peço a quem puder me ajudar, por favor, é muito importante para mim fazer funcionar esse teste nesta classe agora.

public class TestProdutoMock {

ProdutoDTO produtoDTO;
ProdutoModel produtoModel;

@Before
public void setUp() throws Exception {
	
	produtoModel = new ProdutoModel();
	produtoDTO = new ProdutoDTO();
	
}

	
@Test
public void testGravarProduto() throws Exception{
	
	//Criação dos mocks
	ProdutoDAO mockProdutoDAO = EasyMock.createMock(ProdutoDAO.class);
	
	Capture<ProdutoDTO> produtoCapturado = new Capture<ProdutoDTO>();
	
	criarProduto();

	produtoCapturado.setValue(produtoDTO);
	EasyMock.capture(produtoCapturado);
	produtoModel.setDTO(produtoCapturado.getValue());
	produtoModel.setDao(mockProdutoDAO);

	EasyMock.expect(produtoModel.incluir()).andReturn(produtoDTO);

	EasyMock.replay(mockProdutoDAO);
	
	assertEquals(produtoCapturado.getValue().getNomeProduto(),produtoDTO.getNomeProduto());
	assertEquals(produtoCapturado.getValue().getQuantidadeProduto(),produtoDTO.getQuantidadeProduto());
	assertEquals(produtoCapturado.getValue().getTipoProduto(),produtoDTO.getTipoProduto());

	EasyMock.verify(mockProdutoDAO);
	
	
	EasyMock.reset(mockProdutoDAO);
	}

private void criarProduto() {
	produtoDTO.setTipoProduto(1);
	produtoDTO.setNomeProduto("CD Rock Brasil");
	produtoDTO.setPrecoProduto(45.0);
	produtoDTO.setQuantidadeProduto(1);

}

}


public class ProdutoModel{

private ProdutoDTO dto;
private ProdutoDAO dao;
private static final String CLASS_PRODUTO_DAO = "br.org.universa.DAO.ProdutoDAO";

public ProdutoDTO obterProduto(ProdutoDTO dto) throws SQLException {
	
	return getDAO().obterProduto(dto);
	
}

public ProdutoDTO incluir() throws SQLException {
		
	return getDAO().incluir(getDTO());
			
}

private ProdutoDAO getDAO() throws SQLException {
	
	if (dao == null){
		try {
			dao = (ProdutoDAO) DAOFactory.getInstance().getDAO(CLASS_PRODUTO_DAO);
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	return dao;
}

public ProdutoDTO getDTO() {
	return dto;
}

public void setDTO(ProdutoDTO dto) {
	this.dto = dto;
}

public void setDao(DAO mockDAO) {
	this.dao = (ProdutoDAO) mockDAO;
}

}


public class ProdutoDAO implements DAO {

private static final String SQL_INSERT = "insert into PRODUTO (NOMEPRODUTO, PRECOPRODUTO, "
    + "QUANTIDADEPRODUTO,TIPOPRODUTO) "
    + "values(?,?,?,?)";

 private Connection conn;

@Override
public void setConnection(Connection conn) {
	this.conn = conn;
	
}

public ProdutoDTO incluir(ProdutoDTO dto) throws SQLException {
    PreparedStatement ps = conn.prepareStatement(SQL_INSERT);

    ps.setString(1, dto.getNomeProduto());
    ps.setDouble(2, dto.getPrecoProduto());
    ps.setInt(3, dto.getQuantidadeProduto());
    ps.setInt(4, dto.getTipoProduto());
                        
    ps.executeUpdate();
    
    ProdutoDTO prodGravado = obterProduto(dto);
    
    ps.close();
    
    return prodGravado;
}


private void put(ProdutoDTO dto, ResultSet rs) throws SQLException {
 
	dto.setId(rs.getInt("ID"));
	dto.setNomeProduto(rs.getString("NOMEPRODUTO"));
	dto.setPrecoProduto(rs.getInt("PRECOPRODUTO"));
	dto.setQuantidadeProduto(rs.getInt("QUANTIDADEPRODUTO"));
	dto.setTipoProduto(rs.getInt("TIPOPRODUTO"));
}

public ProdutoDTO obterProduto(ProdutoDTO produto) throws SQLException {
    PreparedStatement ps = null;
    ResultSet rs = null;
    ProdutoDTO dto = new ProdutoDTO();
    
    try {
        ps = conn.prepareStatement(SQL_LOAD);
        ps.setString(1, produto.getNomeProduto());

        rs = ps.executeQuery();
        
        if ( rs.next() ) {
            put(dto, rs);
        } else {
            throw new SQLException("Produto não existente no banco de dados");
        }
    } catch ( SQLException e ) {
        throw e;
    } finally {
        if ( rs != null ) {
            try {
                rs.close();
            } catch ( SQLException e ) {
                //Ignore
            }
        }
        
        if ( ps != null ) {
            try {
                ps.close();
            } catch ( SQLException e ) {
                //Ignore
            }
        }
    }
    
    return dto;
}

}

Criado 28 de outubro de 2009
Respostas 0
Participantes 1