테스트 중에 예상하지 않는 경고()와 같은 것이 있습니까?

StackOverflow https://stackoverflow.com//questions/22003306

  •  20-12-2019
  •  | 
  •  

문제

일부 조건에서 경고를 생성하는 함수에 대한 테스트를 작성하고 있습니다.다른 조건에서는 경고를 생성하지 않도록 하고 싶습니다.나는 그것을 쉽게 테스트 할 수있는 명백한 방법을 보지 못한다 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()))
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top