2009-12-23 1 views
0

데이터 저장소를 26 개의 엔티티로 채우는 단위 테스트가 있습니다. DAO가 이러한 엔티티를 검색하고 페이지를 통해 검색하려고하지만 어떻게 든 완전히 작동하도록 할 수는 없습니다. 내가 일 경우 query.setRange (0,10)이 작동하지만 query.setRange (10,20)은 작동하지 않습니다. 단위 테스트에서 26 개의 엔티티가 있음을 표시하는 경우에도 쿼리는 0 개의 결과를 반환합니다.JDO 페이지 매김의 문제점

public void testGetModulesWithPagination(){  
    String current_user="currentUser"; 
    String tags[] = {"football","soccer"}; 

    for (int i=0;i<=25;i++){ 
     Module m = new Module(); 
     m.setOwner("myName"); 
     m.setObjective("m"+i+" objective"); 
     m.setTitle("m"+i); 
     m.setTags(tags); 
     dao.insert(m); 
    } 
    Query query = new Query(Module.class.getSimpleName()); 
    List<Module> modules_page_one = dao.getModules(current_user,"football", "1"); 
    List<Module> modules_page_two = dao.getModules(current_user,"football","2"); 

    assertEquals(26, DatastoreServiceFactory.getDatastoreService().prepare(query).countEntities()); 
    assertNotNull(modules_page_one); 
    assertEquals(10,modules_page_one.size()); 
    assertNotNull(modules_page_two); 
    assertEquals(10,modules_page_two.size()); //FAILS here 
    assertFalse(modules_page_one.equals(modules_page_two)); 
}  

이 내 DAO를 구현 죄송

public List<Module> getModules(String owner,String tag,String page){ 
    getPm(); 
    String queryString = "select from "+Module.class.getName()+" where owner!='"+owner 
     +"'"; 
    Query query = pm.newQuery(queryString); 

    Long pageNumber = Long.parseLong(page); 
    Long lower_bound = pageNumber*10-10; 
    Long upper_bound = pageNumber*10; 

    log.info("pageNumber "+pageNumber); 
    log.info("lower_bound "+lower_bound); 
    log.info("upper_bound "+upper_bound); 

    query.setRange(lower_bound, upper_bound); 
    List<Module> modules = (List<Module>) pm.detachCopyAll((List<Module>) query.execute()); 
    log.info("modules results size "+modules.size()); 
    log.info(modules+""); 
    List<Module> search_results = new ArrayList<Module>(); 
    for (Module module:modules){ 
     String module_tags[] = module.getTags(); 
     for (int i=0;i<module_tags.length;i++){ 
      if (module_tags[i].equals(tag)){ 
       search_results.add(module); 
       continue; 
      } 
     } 
    } 
    closePm(); 
    return search_results; 
} 
+0

단위 테스트에서 인스턴스화하는이 쿼리 클래스는 무엇입니까? JDO의 인터페이스가되어야합니다. – Bozho

+0

오, 그 중 하나는 Google AppEngine에서 구현 한 구현입니다. – Jeune

답변

0

하지만

String queryString = "select from "+Module.class.getName()+" where owner!='"+owner+"'"; 

String queryString = "select from "+Module.class.getName()+" where owner != '"+owner+"'"; 

될 should't입니까?

그냥 확인하십시오.