主要區別在於它們應該用在哪裏。
stopIfnot
旨在停止執行,如果在運行期間某些條件未得到滿足,其中assertError
旨在測試您的代碼。
assertError
期待它的參數來提高一個錯誤,這是當沒有定義x
發生什麼事情,有一個錯誤
> length(x) != 7
Error: object 'x' not found
當你通過這個表達式assertError
,它發出一個錯誤並assertError返回的條件遇見(錯誤本身)。這使您可以測試代碼的失敗情況。
因此assertError
主要用於測試驅動開發模式(TDD)中的測試用例,當您的代碼/函數應該爲某些特定參數引發錯誤並確保您在稍後更新函數時不會中斷它。的stopifnot
用法示例和assertError
:
mydiv <- function(a,b) {
stopifnot(b>0)
a/b
}
現在可以進行測試,以確保這一點,如果我們通過「B」爲0,將引發一個錯誤:
tryCatch(
assertError(mydiv(3,0)),
error = function(e) { print("Warning, mydiv accept to divide by 0") }
)
運行這段代碼沒有產出,期望的行爲。
現在,如果我們發表意見stopifnot在mydiv這樣的:
mydiv <- function(a,b) {
#stopifnot(abs(b)>0)
a/b
}
並再次測試tryCatch
塊,我們得到如下的輸出:
[1] "Warning, mydiv accept to divide by 0"
這是測試功能的一個小例子如預期的那樣真的拋出錯誤。
tryCatch塊只是展示一個不同的消息,我希望這給這個主題更多的燈光。
我不認爲'assertError()'做你認爲它可能。它被設計用於分析代碼以找到預期的錯誤而不是進行計算,並且如果它找不到解析錯誤只會引發實際的錯誤 – Henry
因此,當存在解析錯誤或警告時,這些函數會產生錯誤?這對我來說聽起來像一個奇怪的概念(我與C的assert()一起長大)。 –
否。如果沒有解析錯誤,'assertError()'會引發錯誤。這是一個斷言,有一個錯誤 – Henry