java.lang.AssertionError: un método prueba correctamente pero uno similar no

I have the following 2 methods I'm testing from a DAO:

public List<T> findAll() {
    if (logger.isDebugEnabled()) {
        logger.debug("findAll");
    }
    return currentSession().createCriteria(getPersistentClass()).list();
}

public int count() {
    if (logger.isDebugEnabled()) {
        logger.debug("count");
    }
    return ((Number) currentSession().createCriteria(getPersistentClass()).
            setProjection(Projections.rowCount()).
            uniqueResult()).intValue();
}

Fragmento de prueba:

@Test
@Transactional(isolation = Isolation.SERIALIZABLE)
public void testFindAll(){
    Assert.assertEquals(2566, this.employeeHibernateDAO.findAll().size());
}

@Test
@Transactional(isolation = Isolation.SERIALIZABLE)
public void testCount(){
    Assert.assertEquals(2566, this.employeeHibernateDAO.count());
}

There are a total of 2566 entries on the table, and count returns successfully with its count however findAll no.

Error:

java.lang.AssertionError: 
Expected :2566
Actual   :0
    at org.junit.Assert.fail(Assert.java:91)
    at org.junit.Assert.failNotEquals(Assert.java:645)
    at org.junit.Assert.assertEquals(Assert.java:126)
    at org.junit.Assert.assertEquals(Assert.java:470)
    at org.junit.Assert.assertEquals(Assert.java:454)
    at com.develop.test.data.dao.EmployeeDAOTest.testFindAll(EmployeeDAOTest.java:53)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

So given that error, it is actually returning 0 on that specific method. I cannot figure out why considering count is successful. Any help?

Edit: SQL for count():

09:56:15.180 [main] DEBUG org.hibernate.SQL - 
    select
        count(*) as y0_ 
    from
        EMPLOYEE this_
Hibernate: 
    select
        count(*) as y0_ 
    from
        EMPLOYEE this_

SQL for findAll() (employee3 refers to an Updated-By field):

09:56:15.243 [main] DEBUG org.hibernate.SQL - 
    select
        this_.EMP_ID as EMP1_5_2_,
        this_.ISACTIVE as ISACTIVE5_2_,
        this_.COMPANY_CODE as COMPANY12_5_2_,
        this_.CORP_TITLE as CORP3_5_2_,
        this_.DEPT_CODE as DEPT13_5_2_,
        this_.E_MAIL as E4_5_2_,
        this_.EMP_FIRST_NAME as EMP5_5_2_,
        this_.HIRE_DATE as HIRE6_5_2_,
        this_.JOB_CODE as JOB7_5_2_,
        this_.JOB_TITLE_DESC as JOB8_5_2_,
        this_.EMP_LAST_NAME as EMP9_5_2_,
        this_.MANAGER_ID as MANAGER14_5_2_,
        this_.MANAGER_INDC as MANAGER10_5_2_,
        this_.EMP_MIDDLE_NAME as EMP11_5_2_,
        preference2_.EMP_ID as EMP1_13_0_,
        preference2_.UPDATED_BY as UPDATED4_13_0_,
        preference2_.UPDATED_DATE as UPDATED2_13_0_,
        preference2_.LANGUAGE as LANGUAGE13_0_,
        employee3_.EMP_ID as EMP1_5_1_,
        employee3_.ISACTIVE as ISACTIVE5_1_,
        employee3_.COMPANY_CODE as COMPANY12_5_1_,
        employee3_.CORP_TITLE as CORP3_5_1_,
        employee3_.DEPT_CODE as DEPT13_5_1_,
        employee3_.E_MAIL as E4_5_1_,
        employee3_.EMP_FIRST_NAME as EMP5_5_1_,
        employee3_.HIRE_DATE as HIRE6_5_1_,
        employee3_.JOB_CODE as JOB7_5_1_,
        employee3_.JOB_TITLE_DESC as JOB8_5_1_,
        employee3_.EMP_LAST_NAME as EMP9_5_1_,
        employee3_.MANAGER_ID as MANAGER14_5_1_,
        employee3_.MANAGER_INDC as MANAGER10_5_1_,
        employee3_.EMP_MIDDLE_NAME as EMP11_5_1_ 
    from
        EMPLOYEE this_ 
    inner join
        PREFERENCE preference2_ 
            on this_.EMP_ID=preference2_.EMP_ID 
    left outer join
        EMPLOYEE employee3_ 
            on preference2_.UPDATED_BY=employee3_.EMP_ID
Hibernate: 
    select
        this_.EMP_ID as EMP1_5_2_,
        this_.ISACTIVE as ISACTIVE5_2_,
        this_.COMPANY_CODE as COMPANY12_5_2_,
        this_.CORP_TITLE as CORP3_5_2_,
        this_.DEPT_CODE as DEPT13_5_2_,
        this_.E_MAIL as E4_5_2_,
        this_.EMP_FIRST_NAME as EMP5_5_2_,
        this_.HIRE_DATE as HIRE6_5_2_,
        this_.JOB_CODE as JOB7_5_2_,
        this_.JOB_TITLE_DESC as JOB8_5_2_,
        this_.EMP_LAST_NAME as EMP9_5_2_,
        this_.MANAGER_ID as MANAGER14_5_2_,
        this_.MANAGER_INDC as MANAGER10_5_2_,
        this_.EMP_MIDDLE_NAME as EMP11_5_2_,
        preference2_.EMP_ID as EMP1_13_0_,
        preference2_.UPDATED_BY as UPDATED4_13_0_,
        preference2_.UPDATED_DATE as UPDATED2_13_0_,
        preference2_.LANGUAGE as LANGUAGE13_0_,
        employee3_.EMP_ID as EMP1_5_1_,
        employee3_.ISACTIVE as ISACTIVE5_1_,
        employee3_.COMPANY_CODE as COMPANY12_5_1_,
        employee3_.CORP_TITLE as CORP3_5_1_,
        employee3_.DEPT_CODE as DEPT13_5_1_,
        employee3_.E_MAIL as E4_5_1_,
        employee3_.EMP_FIRST_NAME as EMP5_5_1_,
        employee3_.HIRE_DATE as HIRE6_5_1_,
        employee3_.JOB_CODE as JOB7_5_1_,
        employee3_.JOB_TITLE_DESC as JOB8_5_1_,
        employee3_.EMP_LAST_NAME as EMP9_5_1_,
        employee3_.MANAGER_ID as MANAGER14_5_1_,
        employee3_.MANAGER_INDC as MANAGER10_5_1_,
        employee3_.EMP_MIDDLE_NAME as EMP11_5_1_ 
    from
        EMPLOYEE this_ 
    inner join
        PREFERENCE preference2_ 
            on this_.EMP_ID=preference2_.EMP_ID 
    left outer join
        EMPLOYEE employee3_ 
            on preference2_.UPDATED_BY=employee3_.EMP_ID

preguntado el 30 de enero de 12 a las 19:01

Have you tried to enable logging of the SQL executed? (hibernate.show_sql) -

@PeterLiljenberg I posted what I could see from the log as an edit. -

Parece ser así inner join PREFERENCE must be the problem. Somehow you must have convinced Hibernate that every EMPLOYEE tiene al menos uno PREFERENCE, when in fact, no EMPLOYEE does. (Right?) -

@ruakh thank you for helping, I marked David Grant's as an answer though you also helped. -

1 Respuestas

Is it not conceivable that you actually have zero rows for the joined query? Does the join to PREFERENCE ¿tener éxito?

Respondido el 31 de enero de 12 a las 18:01

Ok so I seem to have identified a few problems that are most likely (but perhaps not completely) generating this issue. My preference table is not populated, and I would rather it be ignored because it should be set to one setting by default. The other problem is that it is of course linking itself to entity employee on the updatedBy field. So I am unsure as to how to proceed so it is ignored for the time being or simply fill it with a default value for each entry on the employee table - that means preference would have 2566 entries as it is One to One with the employee table. - Nimchip

I just lazy loaded Preference for now, thank you. I marked it as an answer. - Nimchip

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.