2011-07-04 232 views
2

在谷歌測試,我想能夠做這樣的事崩潰:測試與谷歌測試

void ImNotNiceToPointers(void* p) 
{ 
    ((int*)p) [5] = 1; 
} 

TEST(Bla, BlaBla) 
{ 
    EXPECT_NO_CRASH(ImNotNiceToPointers(NULL)); 
} 

而且我想輸出顯示錯誤的聲明實際上使進程異常死亡。

在Google測試中是否對此有任何支持?我很確定我將如何自己實施它,所以我幾乎可以肯定這是可能的。

回答

1

可以使用死亡測試隔離崩潰:

EXPECT_EXIT(ImNotNiceToPointers(p); exit(0), ExitedWithCode(0), ''); 

不過,我建議不要使用死亡測試。使用死亡測試會導致啓動子進程的開銷,無論是否發生崩潰。但是,如果您只是將代碼保持原樣並且測試崩潰,那麼您將知道並且能夠修復它。在Valgrind或Dr. Memory等工具的幫助下,追蹤崩潰的起因很容易。

+0

看來,死亡測試是爲了斷言它死亡。 I.e如果沒有,我會得到一個錯誤,我有種尋找其他方法。對於你的其他評論:這不是意外的崩潰,這是爲了確保一個API可以接受各種古怪的輸入與適當的錯誤處理,其中包括傳遞空指針等。捕捉崩潰作爲控制錯誤允許連續執行的測試沒有中斷。 – sharkin

+0

在上面的代碼中,死亡測試斷言驗證代碼通常使用ExitedWithCode(0)謂詞退出。如果ImNotNiceToPointers()調用正常執行,控制權將傳遞給exit()函數,這會強制子進程正常退出,從而滿足測試條件。如果ImNotNiceToPointers調用崩潰,則不會滿足ExitedWithCode(0)謂詞,導致斷言失敗。 – VladLosev