2012-11-02 43 views
0

我想單元測試一個函數,它立即返回,然後通過回調函數返回實際結果。任何人都可以幫助我如何使用cppunit單元測試這個函數。如何單元測試從回調函數發生的異常

例如。

的MyFunction(回撥電話) { .....

}

的MyFunction立即返回成功,那麼實際結果的回調函數,從回調的異常myexception拋出如何我單元測試,以確保我的外殼拋出?

+2

如果回調函數是用戶提供的,那麼如何知道它會拋出異常?如果回調函數在某些情況下拋出異常,則只需爲回調函數構建單元測試即可。終究是被測試的單位。 – Dennis

回答

3

MyFunction立即返回的唯一方法是有一個最終調用回調函數的工作線程。如果是這樣,那麼就不可能在你的代碼中捕獲該工作線程拋出的異常。您必須捕獲工作線程中的所有異常並在那裏處理它們。在異常處理程序中,您仍然可以使用表示發生異常的參數調用回調函數,並通知用戶相關信息。

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

相關問題