Junit integration testcase не удается сравнить даты на уровне dao

#java #spring #junit #integration-testing

#java #весна #junit #интеграция-тестирование

Вопрос:

Я столкнулся с проблемой при выполнении integration testcase. Согласно приведенному ниже запросу, выполняется сравнение дат. Когда этот запрос выполняется testcase, он возвращает нулевой результат. В тот момент, когда я удаляю условие where из запроса, он возвращает правильный результат как 2. Чтобы продолжить, в моем тестовом примере я сначала выбрал сотрудников и проверил, что у них правильная дата и удовлетворяют условию where. Но я все еще в замешательстве, когда эта проверка не выполняется на уровне DAO через Integration testcase.

Ниже приведен класс EmployeeDAOImpl

 private static final String EMP_COUNT_BY_COMPANY_QUERY = "select count(employeeid) from ref_employee e join txn_user u on (e.createdby=u.userid and u.companyid = :companyId) where e.createddate between :startDate and :endDate";

@Override
    public Long getEmpCountByCompany(Long companyId) {
        BigInteger recordCount = (BigInteger) getHibernateTemplate().execute(new HibernateCallback() {
            @Override
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                SQLQuery sqlQuery = session.createSQLQuery(EMP_COUNT_BY_COMPANY_QUERY);
                sqlQuery.setParameter("companyId", companyId);
                sqlQuery.setParameter("startDate", getStartOfCurrentDate());
                sqlQuery.setParameter("endDate", getEndOfCurrentDate());
                return sqlQuery.uniqueResult();
            }
        });
        return recordCount.longValue();
    }
private Date getEndOfCurrentDate() {
        Date end = DateUtils.addDays(new Date(), 1);
        return DateUtils.truncate(end , Calendar.DATE);
    }
private Date getStartOfCurrentDate() {
        return DateUtils.truncate(new Date(), Calendar.DATE);
    }
  

Ниже приведен класс employeeServiceClass

 @Override
    public Long getEmpCountByCompany(Long companyId) {
        return empDao.getEmpCountByCompany(companyId);
    }
  

Ниже приведен тест Junit

     @Transactional
        @DatabaseSetup(value = "EmployeeControllerIT.xml", type = DatabaseOperation.CLEAN_INSERT)
        public class EmployeeControllerIT extends SpringMvcIT {
          @Autowired
          EmployeeService employeeService;

    @Before
        public void setUpEmployeeControllerIT() {
    Set<Long> empIds = new HashSet<Long>();
            empIds.add(new Long("416908791"));
            empIds.add(new Long("416908790"));

            List<Employee> empList = empService.getEmpById(empIds);
            for (Employee emp : empList) {
                emp.setCreatedDate(new Date());
                emp.getAuditInfo().setCreatedBy(user);
                employeeService.saveOrUpdateEmployee(emp);
            }
    }
@Test
    public void shouldReturnFalseIncaseEmpCountIsReached2() throws Exception {

        mockMvc.perform(
                get(EMPLOYEE_VALIDATION).param("action", "isEmployeeAllowed")
                        .accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk()).andExpect(jsonPath("$.isValidCount", is(false)));
    }
        }
  

Ниже приведен контроллер

 @Controller
@RequestMapping("/employeeValidation.htm")
public class EmployeeValidationController {

    private static final String VALIDATE_EMPLOYEE_ELIGIBILITY = "action=isEmployeeAllowed";

    @RequestMapping(method = RequestMethod.GET, params = { VALIDATE_EMPLOYEE_ELIGIBILITY })
    public void validateEmployeeEligibility(HttpServletResponse response) throws Exception {
        Long count = employeeService.getEmpCountByCompany(Constant.COMPANY_ID)
        JSONObject employeeValidationObject = new JSONObject();
        boolean flag = true; 
        if(count>=2) {
            flag = false; 
        }
        employeeValidationObject.put("isValidCount", flag);
        response.setContentType("application/json");
        response.getOutputStream().write(employeeValidationObject.toString().getBytes("UTF-8"));
    }
}
  

Комментарии:

1. Вы пытались использовать отладчик, чтобы выяснить, соответствуют ли даты тем, что вы ожидали?

2. Я не использовал отладчик (не могли бы вы указать мне ссылку, чтобы узнать, как отлаживать testcase), но я ввел инструкции sysout, которые отображают ожидаемые даты

3. Вы работаете с eclipse?

4. @Jens Да, я работаю в eclipse, а инструментом сборки является gradle

5. Смотрите это: vogella.com/tutorials/EclipseDebugging/article.html