문제

CPPUnit을 단위 테스트 프레임 워크로 사용하고 있으며 이제 자동화 된 빌드 및 패키지 시스템에서 사용하려고합니다. 그러나 나를 방해하는 문제는 단위 테스트를 실행하는 동안 충돌이 발생하는 경우, 예를 들어 널 포인터 디퍼링을 수행하면 자동화의 나머지 부분이 중단된다는 것입니다.

CPPUnit이 예외에서 복구하고 테스트 실패를 기록한 다음 단위 테스트 프로세스를 종료하지 않고 우아하게 존재하는 방법이 있습니까? Null 포인터 Dereferencing과 관련된 접근 방식조차도 내가 가진 문제의 약 90%를 구성하기 때문에 유용 할 것입니다.

기술별로, 나는 Windows 시스템에서 makefiles를 사용하고 있습니다.

도움이 되었습니까?

해결책

빌드 프로세스 중에 CPPUnit 기반 단위 테스트 실행을 자동화하고 있습니까?

CPPUnit을 사용하여 빌드 프로세스를 실행하려고한다면 그렇게하지 말라고 유혹 할 것입니다!

단위 테스트가 충돌 할 때 빌드 프로세스를 중지하는 것이 무엇인지 말씀해 주시겠습니까? 그리고 당신의 단위 테스트는 무엇입니까? 지속적인 통합 프레임 워크 ?


귀하의 질문에 답하기 위해 CPPUNIT는 위반 또는 세분화 오류에서 회복 할 수 없습니다. UNIX와 같은 시스템에서는 SIGSEGV를 잡고 계속할 수 있어야합니다. 하지만 어느 상태 ?

제품이 아닌 단위 테스트에서 충돌이 발생하면 의존하는 것이 좋습니다. 주장 경비원 널 포인터를 방지하기 위해 :

class TestObject : public CPPUNIT_NS::TestCase
{
  CPPUNIT_TEST_SUITE(Test);
  CPPUNIT_TEST(testObjectIsReady);
  CPPUNIT_TEST_SUITE_END();

public:
  void setUp(void) {}
  void tearDown(void) {} 

protected:
  void testObjectIsReady(void)
  { 
     Object *theObject = GetObject();

     CPPUNIT_ASSERT_MESSAGE("check pointer is not null", theObject != NULL);

     //--- now you can play with your object without dereferencing a NULL pointer
     CPPUNIT_ASSERT_MESSAGE("check objet is ready", theObject->isReady());
  }
};

다른 팁

이것을 말해서 죄송하지만 이전 답변은 이에 대해받은 것이 우스운 일입니다. CPPUNIT는 이와 관련하여 실제로 부족합니다. CPPUnit은 EXIT_ON_FAIL 매크로를 구현해야합니다.이 매크로는 Windows (SetunHandledExceptionFilter 사용)에서 액세스 위반을 가두는 경우 CPP-UNIT가 EXIT_ON_FAIL을 통해 실패를보고 할 수 있습니다. 그런 다음보고 후 신청서를 종료하십시오.

C/C ++에서 이와 같은 오류에서 복구하는 가장 좋은 방법은 각 테스트를 별도의 프로세스에서 실행 한 다음 부모 프로세스에서 모니터링하는 것입니다. 이것은 UNIX에서 매우 쉽습니다. 테스트가 시작되기 전에 Fork () 만 있습니다. 확인하다 이것을 지원하면 CPPUnit이 혼란스럽지 않고이 동작을 갖도록 패치 할 수 있습니다.

나중에이 질문을 잊어 버린 사람에 대한 추가 메모로 UnitTest ++ 테스트에서 예외를 포착 할 수 있으며 프로세스 종료를 초래하지 않고 적절한 정보로 테스트에 실패 할 수 있습니다.

나는 그것을 시도하지 않았지만 Windows에서 Seh를 사용하는 것이 도움이 될 것 같아요.

__try
{
// running your case
}

__except
{
}

CPPUnit 프레임 워크에 통합하고 매번 알 수없는 예외를 받으십시오. 사례를 실패로 표시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top