테스트 중에 예상하지 않는 경고()와 같은 것이 있습니까?
문제
일부 조건에서 경고를 생성하는 함수에 대한 테스트를 작성하고 있습니다.다른 조건에서는 경고를 생성하지 않도록 하고 싶습니다.나는 그것을 쉽게 테스트 할 수있는 명백한 방법을 보지 못한다 testthat
.나는 다음과 같은 것을 할 수 있다고 생각한다:
my.result <- 25
my.func <- function() my.result
expect_equal(
withCallingHandlers(
my.func(), warning=function() stop("A Warning!")
),
my.result
)
또는 사용 options(warn=2)
, 하지만 저는 이런 일이 있을 것으로 기대하고 있었습니다.:
expect_no_warnings(my.func())
나는 명백한 것을 놓치고 있습니까?
해결책
최신 버전의 'testthat '( 0.11.0 에서)DO :
expect_warning(my.func(), regexp = NA)
.
expect_error
regexp : 테스트 할 정규 표현식.생략하면 해당 코드가 일부 출력, messsage, 경고 또는 오류를 생성하는 것을 어설칩니다.또는 출력, 메시지, 경고 또는 오류가 없어야 함을 나타내는 DA를 지정할 수 있습니다.
와 같은 방식으로 메시지, 오류 및 출력이 없음을 테스트 할 수 있습니다.
다른 팁
최근의 TestThat 버전에서는 단순히 다음을 수행 할 수 있습니다.
expect_that(my.func(), not(gives_warning()))
. 업데이트: 사용 expect_silent()
요즘 때문에 expect_that
더 이상 사용되지 않습니다,함수에 대한 도움말을 참조하십시오!.
업데이트 2: @이글 프리먼에 의해 언급 된 바와 같이 를 사용하여 대답 expect_warning
파라마와 함께 regexp
로 설정 NA
내 대답이 경고가 발생하지 않았지만 메시지가 인쇄 된 경우에도 테스트가 실패하기 때문에 가장 좋은 해결책입니다.그러나 이것은 그들이 원하는 것이 아닙니다(그러나 단지 경고를 무시하십시오).나는 다른 독자를 위해 이 효과를 명확하게 하기 위하여 이 응답을 삭제하지 않는다.
도움말의 예에서:
expect_silent("123")
f <- function() {
message("Hi!")
warning("Hey!!")
print("OY!!!")
}
expect_silent(f())
경고: expect_silent
또한 의미론이 조금 다르므로 출력을 기대하지 않습니다!
expect_warning()
가 실패하는지 확인할 수 있습니다.다음은 my.func()
및 not()
가 사용하지 않는 다른 종류의 출력의 문제를 해결합니다.
expect_failure(expect_warning(my.func()))
.