Announcement Announcement Module
No announcement yet.
Using AbstractTransactionalDataSourceSpringContextTests for Hibernate DAO unit test Page Title Module
Move Remove Collapse
Conversation Detail Module
  • Filter
  • Time
  • Show
Clear All
new posts

  • Using AbstractTransactionalDataSourceSpringContextTests for Hibernate DAO unit test


    I am using the AbstractTransactionalDataSourceSpringContextTests for my Hibernate DAO class unit test. I am using the autowire by name for my beans. Following an example I found on the internet, I am able to put my testing data into spring configuration file with beans. That really gives me a lot of efficiency when I need to adjust testing data. However, I noticed one thing that does not work as the the example specified.

    Here is the original example:

    import java.util.List;
    import java.sql.Timestamp;

    import org.springframework.test.AbstractTransactionalData SourceSpringContextTests;


    public class RolesDAOTest extends AbstractTransactionalDataSourceSpringContextTests {

    protected String[] getConfigLocations() {
    return new String[] { "classpath*:/**/applicationContext-hibernate.xml",


    private RolesDAO dao;

    private Long existingId;

    private Roles testEntityRoles;

    private String testDescription;

    public void setRolesDAO(RolesDAO dao) {
    this.dao = dao;

    public RolesDAO getRolesDAO() {
    return this.dao;

    public void setExistingId(Long id) {
    this.existingId = id;

    public Long getExistingId() {
    return this.existingId;

    public Roles getTestEntityRoles() {
    return testEntityRoles;

    public void setTestEntityRoles(Roles testEntityRoles) {
    this.testEntityRoles = testEntityRoles;

    public void testGetById() {
    Roles test = dao.getById(existingId);

    public void testFindAll() {
    List<Roles> all = dao.findAll();
    assertNotNull("testFindAll", all);
    assertFalse("testFindAll", all.isEmpty());

    public void testSaveAndRemove() {;
    Roles test = dao.getById(testEntityRoles.getRoleId());
    assertNotNull("testSaveAndRemove", testEntityRoles.getRoleId());
    assertNotNull("testSaveAndRemove", test);
    test = dao.getById(testEntityRoles.getRoleId());
    assertNull("testSaveAndRemove", test);

    public String getTestDescription() {
    return testDescription;

    public void setTestDescription(String testDescription) {
    this.testDescription = testDescription;

    public void testFindByDescription() {
    List<Roles> list = dao.findByDescription(testDescription);
    assertNotNull("testFindByDescription", list);
    assertFalse("testFindByDescription", list.isEmpty());


    In the original example, the testing data was set as property for the RolesDAOTest class. However, when I run it in the Junit test, the Junit did not get the RolesDAOTest from bean context. Junit still calls the new RolesDAOTest() to get an instance. I am able to get the DAO class and other testingEntity beans load automatically.

    Right now, I use alternative to create another testing data bean to load the testing data. The problem is that I have to use the hibernate mapping Roles class, which does not give me much flexibility. If I want to have a testing case to test search by a list of roleNames, I can not do it using this approach.

    I am new to Spring and so I am wondering that maybe I misunderstand how to use the AbstractTransactionalDataSourceSpringContextTests? Any comments for my question will be helpful.