Testar persistência com Hibernate + Spring

Olá,

Criei minha camada de persistência com Hibernate + Spring (não usei templates), com os DAOs, os services com transactions e os beans todos anotados devidamente. Meu problema está em como testar essa camada. Já procurei muito e sempre encontro tópicos que falam de JUnit e DBUnit, porém ou eram de pessoas com as classes já feitas e tendo problemas ou com integração com o Mavin, que eu não estou usando.

Gostaria que alguém me mostrasse como eu posso fazer isso. Aqui vão algumas classes minhas e a classe que construí, meio que às cegas, para tentar o teste:

classe Usuario

@Entity
@Table(name="usuario")
public class Usuario implements Serializable{
    private long id;
    private String nome;
    private String email;
    private String senha;
    private String login;
    private String tipo;
    private Date dataCadastro;
    private int pontos;
    private String foto;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="user_id")
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }

    @Column(name="user_nome")
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }

    @Column(name="user_email")
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    ...
    ...
}

Usuario DAO

@Repository
public class HibernateUsuarioDAO {
    private SessionFactory sessionFactory;
    
    @Autowired
    public HibernateUsuarioDAO(SessionFactory sessionFactory){
        this.sessionFactory = sessionFactory;
    }
    
    private Session currentSession(){
        return sessionFactory.getCurrentSession();
    }
    
    public void addUsuario(Usuario usuario){
        currentSession().save(usuario);
    }
    
    public void atualizaUsuario(Usuario usuario){
        currentSession().update(usuario);
    }
    
    public void excluirUsuario(Usuario usuario){
        currentSession().delete(usuario);
    }
    
}

classe UsuarioService

@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class UsuarioService {
    
    private HibernateUsuarioDAO usuarioDao;
    
    @Autowired
    public UsuarioService(HibernateUsuarioDAO usuarioDao){
        this.usuarioDao = usuarioDao;
    }
    
    public void addUsuario(Usuario usuario){
        usuarioDao.addUsuario(usuario);
    }
    
}

Tentativa de teste…

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"spring.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
public class HibernateFuncionalTestBase {
    @Autowired
    protected UsuarioService usuarioService;
    @Autowired
    protected VerbeteService verbeteService;
    
    @Test
    protected void addUsuario(){
        Usuario usuario = new Usuario();
        usuario.setNome("nome");
        usuario.setDataCadastro(new Date());
        usuario.setEmail("email");
        usuario.setFoto("foto");
        usuario.setLogin("login");
        usuario.setPontos(5);
        usuario.setSenha("senha");
        usuario.setTipo("ADMIN");
        usuarioService.addUsuario(usuario);
    }
}

Como disse, fiz essa classe de testes sem entender bem…

Meus beans estão em WEB-INF/spring.xml

Qualquer link ou informação sobre o assunto será apreciada :slight_smile:

Obrigado.