Help testes

5 respostas
fabioebner

Amigos, tirem uma duvida minha, estou comecando a mexer com Junit e gostaria de saber se tem como eu mockear o hibernate, quero executar um metodo mas na hora de salvar no banco quero abstrair esse salvar no banco, apenas que ele valide que salvou e me retorne…

e possivel isso?

obrigado

5 Respostas

tveronezi

O EntityManager é uma interface. Vc pode sobrescrever a implementacao do EntityManager do hibernate por uma implementação dummy.

private class MyEntityManager implements EntityManager {

        @Override
        public void persist(Object entity) {
            //faz nada
        }

        @Override
        public <T> T merge(T entity) {
            return null; //faz nada
        }

        @Override
        public void remove(Object entity) {
            //faz nada
        }

        @Override
        public <T> T find(Class<T> entityClass, Object primaryKey) {
            return null; //faz nada
        }

.
.
.

        @Override
        public Metamodel getMetamodel() {
            return null;  //faz nada
        }
    }
fabioebner

Utilizo o controle de Transacao do Spring, mesmo assim sera que eu consigo fazer isso?

tveronezi

Mande um exemplo do teu código junit pra eu poder dar uma olhada.

fabioebner

o junit ou o dao que salva no banco??

exemplos:

DAO
Component
public class UsuarioDao {

	private HibernateTemplate hibernateTemplate;
	
	@Autowired
	public void setHibernateTemplate(@Qualifier("sessionFactory")SessionFactory sessionFactory){
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	}

	public void saveOrUpdate(TbUsuario usuario) {
		this.hibernateTemplate.saveOrUpdate(usuario);
		
	}
}

dentro do meu Service eu faco algumas verificacoes, tipo, email ja cadastrado, dados informacodos corretamente

e no meu teste eu so chamo

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class })
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UsuarioServiceTest {

	@Autowired
	private UsuarioService usuarioService;

private TbUsuario usuario;	
	@Before
	public void setUp() {
//crio um usuario teste;
    usuario = TbUsuario.novoUsuarioTeste();
	}

	@Test
	public void salvarUsuario(){
      Assert.assertTrue(usuarioService.salvarUsuario(usuario));
}

o problema e que toda hora eu perciso pegar esse usuario e excluir ele da base novamente, isso para eu salvar apenas um usuario nao estou contemplando a situaçao de que ele precisa fazer parte de uma empresa (que eu ja tenho cadastrada) senao eu teria que cadastrar uma empresa, cadastrar o usuario, apagar o usuario e depois apagar a empresa)

queria saber se e possivel ele simular um insert e apenas me retornar se deu certo ou nao, sem que depois seja preciso apagar tudo do banco

tveronezi

Posso ver a parte que vc usa no UsuarioService?

Talvez vc possa fazer o mock das coisas que o service usa.

Criado 20 de julho de 2012
Ultima resposta 20 de jul. de 2012
Respostas 5
Participantes 2