2012-01-06 5 views
5

Android 앱을 만드는 데 TDD 방식을 사용하려고합니다. 나는 ORMLite와 Mockito/Robolectric를 테스트에 사용하고 있습니다. 나는 간단한 일 시험 문제로 실행했습니다ORMLite의 DAO를 통해 DB와 통신하는 테스트 클래스

public List<ITask> getTasksForNextTwoWeeks() throws SQLException { 
    // Code to be written 
} 

음 (일부 클래스 포장까지 DAO 호출의 방법)

을, 내부의 코드는 적절한 쿼리 메소드 호출 될 것입니다.

해당 코드를 테스트하는 가장 좋은 방법은 무엇입니까? 나는 이것에 대해 생각해 왔지만 실제 데이터베이스에 액세스하지 않고는 솔루션을 생각할 수 없다.

모든 의견을 환영합니다.

+0

+1 및 robolectric/mockito 콤보. –

답변

2

Hrm. Dao 클래스를 만드는 방법에 따라 약간 다릅니다. ORMLite에서 Dao 클래스는 약간의 배선만으로 조롱 된 DAO를 삽입하고 모의 호출을 통해 쿼리 호출을 처리 할 수 ​​있어야한다는 것을 의미하는 인터페이스입니다.

public void setDao(Dao<ITask, String> dao) { 
    this.dao = dao; 
} 

private Dao<ITask, String> getDao() { 
    if (dao != null) { 
     // typical ORMLite pattern 
     dao = getHelper().getITaskDao(); 
    } 
    return dao; 
} 

그런 다음 getTasksForNextTwoWeeks() 방법은 같은 것을 할 것 :

예를 들어, 당신은이처럼 포장 클래스 그렇다고에 setDao 방법을 가질 수

public List<ITask> getTasksForNextTwoWeeks() throws SQLException { 
    QueryBuilder<ITask, String> qb = getDao().getQueryBuilder(); 
    qb.where().gt(...); 
    return qb.query(); 
} 

을하지만이 좋은 비트를 필요로 조롱을해서 QueryBuilder을 얻으십시오.

우리가하는 일은 ORMLIte Dao 인터페이스를 확장하고 getTasksForNextTwoWeeks()과 같은 metods를 ITaskDao 클래스에 추가하는 것입니다.

그러면 ITaskDao을 쉽게 조롱하고 모든 데이터베이스 작업을 건너 뛸 수 있습니다.

희망이 도움이됩니다.

+0

DAO를 단위로 테스트하거나 DB와 통합 테스트를하는 것이 더 나은지 궁금합니다. Mocking QueryBuilder는 지나치게 복잡하게 보입니다. – LordTwaroog

+0

동의. 제가 말씀 드렸듯이 당신의 프로그램 대부분은 Dao를 모의하는 것이 좋습니다. 하지만 여전히'ITaskDao' 클래스를 테스트해야합니다. – Gray

4

너무 복잡하기 때문에 Gray의 응답을 좋아하지 않습니다. 난 당신이 단순히 데이터베이스 이름으로 null을 전달하여, 대신 메모리 데이터베이스를 생성하는 것이 좋습니다 :

OrmLiteSqliteOpenHelper(context,null, null, DATABASE_VERSION); 

당신이 으로 한 시험에서 쿼리를 테스트 할 수 있습니다 그 방법 A) 모의 요소 B) 테스트의 경우 추가 SqliteOpenHelper - 래퍼가 올바른 결과를 반환합니다.

모든 테스트는 실제 데이터베이스 및 제품군의 다른 테스트와 완전히 독립적입니다.

관련 문제