주요 차이점은 어디에 사용해야하는지입니다.
stopIfnot
assertError
코드를 테스트 할 때 실행 중에 일부 조건이 충족되지 않으면 실행을 중지하는 것이 목표입니다.
assertError
는 assertError
이 표현을 통과 할 때,이 오류가 발생하고 assertError이 조건을 반환
> length(x) != 7
Error: object 'x' not found
오류가있어,이 x
이 정의되지 않은 때 발생하는 것입니다, 오류가 발생하는 매개 변수의 기대 만났다 (그 자체의 오류). 이를 통해 코드의 실패 사례를 테스트 할 수 있습니다.
그래서 assertError
은 테스트 주도형 개발 패턴 (TDD)의 테스트 사례에서 주로 사용되며, 코드/함수가 특정 매개 변수에 대해 오류를 발생시키고 나중에 함수를 업데이트 할 때 오류가 발생하지 않도록해야합니다. 그것.
예 stopifnot
의 사용 및 assertError
:이 코드를 실행
tryCatch(
assertError(mydiv(3,0)),
error = function(e) { print("Warning, mydiv accept to divide by 0") }
)
: 지금
mydiv <- function(a,b) {
stopifnot(b>0)
a/b
}
그리고 우리가 0으로 "B"를 통과 할 경우 오류가 발생합니다이를 보장하기위한 테스트를 할 수 있습니다 출력, 원하는 동작을 생성하지 않습니다. 우리는이 같은 mydiv에 stopifnot을 언급하는 경우
지금 :
[1] "Warning, mydiv accept to divide by 0"
이 함수를 테스트의 작은 예는 다음과 같습니다
mydiv <- function(a,b) {
#stopifnot(abs(b)>0)
a/b
}
그리고 다시 tryCatch
블록을 테스트, 우리는이 출력을 얻을 실제로 예상대로 오류가 발생합니다.
tryCatch 블록은 다른 메시지로 보여 주기만하면됩니다. 주제에 대해 더 자세히 알려주 길 바랍니다.
나는'assertError()'가 그렇게 생각하지 않는다고 생각합니다. 계산을 수행하는 대신 예상되는 오류를 찾기 위해 코드를 파싱하도록 설계되었으며 구문 분석 오류를 찾지 못하면 실제 오류가 throw됩니다. – Henry
파싱 오류 또는 경고가있을 때 이러한 함수가 오류를 발생시키지 않으십니까?그것은 나에게 이상한 개념처럼 들린다 (나는 C의 주장()으로 자랐다). –
아니요. 'assertError()'는 구문 분석 오류가 없으면 오류를 발생시킵니다. 오류가 있다는 주장입니다 – Henry