2012-11-02 4 views
0

즉시 반환하는 함수를 단위 테스트하고 콜백 함수를 사용하여 실제 결과를 반환하려고합니다. 아무도 cppunit을 사용하여이 함수를 단위 테스트하는 방법을 설명 할 수 있습니까?콜백 함수에서 예외 테스트 호출 방법

예 :

의 MyFunction (콜백 호출) { .....

}

의 MyFunction 즉시 성공을 반환 한 후 콜백 함수의 실제 결과는 콜백에서 예외 myexception은 어떻게 발생합니다 myexception이 throw되는지 확인하기위한 단위 테스트?

+2

콜백 함수가 사용자가 제공하는 경우 어떻게 예외를 throw하는지 알 수 있습니까? 어떤 경우 콜백 함수가 예외를 throw하는 경우 어느 방법이든 콜백 함수에 대한 단위 테스트를 작성하기 만하면됩니다. 그것은 결국 시험을 받고있는 단위입니다. – Dennis

답변

3

MyFunction이 즉시 반환하는 유일한 방법은 결국 콜백 함수를 호출하는 작업 스레드를 갖는 것입니다. 그렇다면 코드에서 해당 작업 스레드에서 throw 된 예외를 포착 할 수 없습니다. 작업 스레드 내에서 모든 예외를 catch하고 거기에서 처리해야합니다. 예외 처리기에서는 여전히 예외가 발생했음을 나타내는 매개 변수가 포함 된 콜백 함수를 호출 할 수 있으므로 사용자에게 예외를 알립니다.

0

xUnit++을 사용하고이 단계를 두 단계로 수행합니다. MyFunction 테스트를 수행하고 콜백을 테스트합니다.

FACT("MyFunction returns immediately") 
{ 
    struct callback 
    { 
     callback() 
      : success(false) 
     { 
     } 

     void operator()() const 
     { 
      if (!success) 
      { 
       Assert.Fail() << "MyFunction executed callback before returning."; 
      } 
     } 

     bool success; 
    } cb; 

    MyFunction(cb); 

    cb.success = true; 
} 

FACT("The real callback throws an exception when complete") 
{ 
    auto e = Assert.Throws<MyException>(myCallback); 

    // further asserts for the value of e 
} 
+0

전체 공개, xUnit ++를 작성했습니다. – moswald

관련 문제