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;
}
}