我想單元測試一個函數,它立即返回,然後通過回調函數返回實際結果。任何人都可以幫助我如何使用cppunit單元測試這個函數。如何單元測試從回調函數發生的異常
例如。
的MyFunction(回撥電話) { .....
}
的MyFunction立即返回成功,那麼實際結果的回調函數,從回調的異常myexception拋出如何我單元測試,以確保我的外殼拋出?
我想單元測試一個函數,它立即返回,然後通過回調函數返回實際結果。任何人都可以幫助我如何使用cppunit單元測試這個函數。如何單元測試從回調函數發生的異常
例如。
的MyFunction(回撥電話) { .....
}
的MyFunction立即返回成功,那麼實際結果的回調函數,從回調的異常myexception拋出如何我單元測試,以確保我的外殼拋出?
MyFunction立即返回的唯一方法是有一個最終調用回調函數的工作線程。如果是這樣,那麼就不可能在你的代碼中捕獲該工作線程拋出的異常。您必須捕獲工作線程中的所有異常並在那裏處理它們。在異常處理程序中,您仍然可以使用表示發生異常的參數調用回調函數,並通知用戶相關信息。
我會使用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
}
充分披露,我寫了xUnit ++。 – moswald
如果回調函數是用戶提供的,那麼如何知道它會拋出異常?如果回調函數在某些情況下拋出異常,則只需爲回調函數構建單元測試即可。終究是被測試的單位。 – Dennis