2010-09-13 51 views

回答

16

如果在當前進程中執行某個函數會導致程序終止(細節解釋了死亡測試是從一個子進程調用的,該進程允許測試在死亡的情況下繼續),那麼這個斷言就是確認的。這很有用,因爲某些代碼可以保證程序在失敗時終止/中止(例如,如果有不可恢復的錯誤),並且單元測試應該確認函數符合其記錄的行爲,而不管可能是什麼。

wiki頁面上的描述真是最好的解釋是:

在許多應用中,有可能會導致應用程序故障如果條件不滿足斷言。這些完整性檢查確保程序處於已知的良好狀態,在某些程序狀態被破壞之後,會盡早失敗。如果斷言檢查錯誤的情況,那麼程序可能會進入錯誤的狀態,這可能導致內存損壞,安全漏洞或更糟糕的情況。因此,測試這樣的斷言陳述如預期那樣工作是非常重要的。

+0

困擾我的部分是通過'ASSERT()'或'assert()'使用谷歌死亡測試的好處。 – Wernight 2010-09-13 09:44:42

+3

@Wernight:如果使用'assert'並且失敗,那麼進程停止,並且因此單元測試停止,不生成報告等。通過在另一個進程中啓動測試,可以監視它是否按預期停止,如果它沒有報告,等等...... – 2010-09-13 11:25:41

+0

@Matthieu:所以通過在Google Test的ASSERT_EXIT()中替換應用傳統的'assert()',這個版本可以工作,但是在測試執行期間,可以正確地檢查斷言。 – Wernight 2010-09-15 14:13:31

1

我想在您的鏈接引進解釋它相當不錯:

在許多應用中,有可能會導致應用程序故障如果條件不滿足斷言。這些完整性檢查確保程序處於已知的良好狀態,在某些程序狀態被破壞之後,會盡早失敗。如果斷言檢查錯誤的情況,那麼程序可能會進入錯誤的狀態,這可能導致內存損壞,安全漏洞或更糟糕的情況。因此,測試這樣的斷言陳述如預期那樣工作是非常重要的。

由於這些先決條件檢查會導致進程死亡,所以我們稱之爲死亡測試。更一般地說,任何檢查程序以預期方式終止的測試也是一項死亡測試。

這是什麼意思?

+0

我可能錯過了那部分。所以傳統的ASSERT()是一個死亡測試。 – Wernight 2010-09-13 09:43:10

+3

@Wernight:不,ASSERT_DEATH是一個死亡測試。傳統的'assert'是程序行爲,你可能想寫一個死亡測試,來證明發生'assert'的過程如預期的那樣死亡。 – 2010-09-13 09:49:57