2012-07-24 4 views
1

나는 ListContainer 클래스가 있습니다. 클래스는 목록에 대한 컨테이너 허용 3 작업 :컨테이너 클래스를 테스트하는 방법은 무엇입니까?

  1. getNotValid (유효하지 않은 요소의 반환 목록)을 제거 추가 할 수 있습니다.

목록이 클래스에서 비공개이므로 추가하는 것이 실제로 요소를 추가하는지 확인할 수 없습니다. 추가 기능을 어떻게 테스트해야한다고 생각하십니까?

제 의견으로는 getNotValid로 확인해야합니다.

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 
Container::Container() { 
} 


void Container::add(Element element) { 
    pthread_mutex_lock(&mutex); 
    list.push_back(element); 
    pthread_mutex_unlock(&mutex); 
} 

void Container::remove(unsigned int elementId) { 
    pthread_mutex_lock(&mutex); 
    list<Element>::iterator it; 
    for (it = list.begin(); it != list.end(); ++it) { 
     if (element->id == elementId) { //TODO is it the real check 
      list.erase(it); 
     } 
    } 
    pthread_mutex_unlock(&mutex); 
} 

list<Element> Container::getNotValid() { 
    list<Element> result; 
    pthread_mutex_lock(&mutex); 
    list<Element>::iterator it; 
    for (it = list.begin(); it != list.end(); ++it) { 
     if (element->isNotValid()) { 
      result.push_back(*it); 
     } 
    } 
    pthread_mutex_unlock(&mutex); 
    return result; 
} 
+1

"유효"항목이 목록에 있거나 아니면 유효하지 않은 항목을 반환하는 데 사용되는 목록입니까? –

+0

getNotValid는 유효하지 않은 요소를 제거하고 반환합니다. –

답변

1

클래스는 일반적으로 특정 작업이 일부 응용 프로그램 상태에 어떤 영향을 미치는지 테스트를 이용하여 각 공용 인터페이스 나 (통합 테스트를 사용)를 통해 테스트됩니다.

비공개 목록에서 API 사용자가 잘못된 항목을 검색하도록 허용하는 것 외에는 add, removegetNotValid 방법을 사용하여 목록을 테스트하면됩니다.

유효한 항목이 어떤 식 으로든 (예 : 파일 시스템이나 데이터베이스에 기록되는 경우) 통합 테스트를 통해 클래스를 테스트하고 응용 프로그램 상태에서 원하는 효과가 실제로 발생하는지 확인해야합니다 장소.

+0

공개 API를 통해 테스트하기 위해 최선을 다해야한다고 생각합니다.이 경우 테스트에서는 유효하지 않은 요소를 추가하고 제거하고 유효하지 않은 getnot이 반환하지 않는지 확인합니다. 추가 테스트는 공개 API를 기반으로 수행됩니다. –

0

개인적인 것을 테스트 할 필요가 없습니다. 해당 목록에 추가 및 제거 할 때 측정 가능한 효과가 있어야합니다. ListContainer이 포함 된 클래스를 테스트하면 ListContainer이 제대로 작동하는지 알려줍니다.

덧글을 쉽게하기 위해 추가 코드를 추가 할 수 있습니까?

0

add 작업은 ListContainer 고객에게 어떻게 표시됩니까? 클래스를 사용한다고 가정하고 항목을 추가 한 다음에 무엇을할까요? 이 상태에서 어떻게 사용합니까? 행동 변화를 관찰 할 수 있습니까? 국가 변경? 추가 된 항목의 속성이 변경됩니까? 내가 일부 변경 사항을 관찰 할 수 있어야합니다, 그리고 이것은 테스트 할 때 집중해야합니다. 관찰 가능한 변경.

또는 단위 테스트의 경우 private 목록을 노출시킬 수 있습니다 (테스트 클래스/어셈블리와 관련된 가시성 변경).

1

테스트 할 수없는 클래스를 작성하는 것은 쉽습니다. 귀하의 경우 클래스는 그것을 테스트 할 공용 API를 가지고 있지 않습니다. 즉, 세 가지 메소드를 호출 할 수 있는지 확인하는 것 외에는 심각한 테스트를 작성할 수없고 예외를 throw하지 않습니다.

한편, 클래스를 테스트 할 수있게 만드는 메서드를 추가하면 안됩니다. 이 아니어야합니다. 이 아니어야합니다. 테스트를 심각하게 받아들이면 API를 단순하게 유지하는 것보다 유용한 테스트를 갖는 것이 더 중요합니다.

경우에 따라 size() 메서드를 추가하는 것이 좋습니다. 요소를 추가/제거 할 때 목록의 크기가 변경되어야합니다.

또는 toString() 메서드를 추가하십시오. 이 디버깅 할 때 유용 할 것이다 및 테스트를 작성 :

ListContainer c = new ListContainer(); 
c.add("x"); 
assertEquals("[x]", c.toString()); 
+0

toString의 아이디어를 좋아합니다. –

+0

사람들은 'toString()'을 변경하려고하는데 조심해야합니다. 그러면 테스트가 중단됩니다. –

관련 문제