我有一個呼叫SendFeedback()發送訊息并成功回傳的場景。該訊息由另一個拋出的執行緒接收。EXPECT_THROW不起作用,因為SendFeedback()不會拋出自己。有沒有辦法期待這種例外?
偽代碼:
auto listener = Listener();
auto sender = Sender();
...
sender.SendFeedback();
// listener throws due to unexpected feedback. This exception is to be expected
uj5u.com熱心網友回復:
這并不完全符合您的要求,但 GTest 具有用于死亡測驗的機制,您可以在其中斷言給定的呼叫會使程式崩潰。未捕獲的例外呼叫std::terminate,默認情況下呼叫std::abort,因此將通過斷言。
我做了一個小的概念證明來驗證它是否有效:
void delayed_uncaught_exception()
{
using namespace std::chrono_literals;
std::thread thread([] { throw std::runtime_error("Error"); });
std::this_thread::sleep_for(50ms);
}
TEST(MyDeathTest, DelayedException)
{
ASSERT_DEATH(delayed_uncaught_exception(), "");
}
雖然,我強烈同意這個問題下的討論,死亡測驗可能不是最適合這個測驗場景,從長遠來看,我建議重新設計流程。
uj5u.com熱心網友回復:
我為通信庫撰寫了類似的測驗程式。我使用了一個獨立的通信通道將結果發送回 gtest 執行緒。接收執行緒必須捕獲例外并將結果發送回行程的 gtest 執行緒。這個通信通道可以只是一個全域變數或某種訊息佇列,但兩個執行緒必須同步。我發現障礙對此很有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/513369.html
標籤:C c 11谷歌测试
