오류가 발생하지 않는지 테스트하는 방법은 무엇인가요?

R 패키지에 대한 테스트를 구현하기 시작했고 'testthat' 패키지를 사용하고 있습니다. 저는 테스트에 익숙하지 않기 때문에 제 접근 방식이 잘못되었을 수 있습니다.

현재 16 번째로 실행될 때마다 실패하는 함수가 있는데,이 문제를 해결하기 전에 다시 나타나면이를 포착하는 회귀 테스트를 작성하고 싶습니다.

예를 들어 다음은 항상 동일한 오류 메시지를 던집니다:

 for i in (1:17) myfun()

myfun`은 아무것도 반환하지 않고 데이터베이스 연결을 여는 부작용만 있습니다. 오류를 예상하고 반환되면 통과하는 테스트를 작성할 수 있다는 것은 분명합니다:

 expect_error(for (i in 1:17) myfun()) 

그러나 오류가 발생하지 않도록 테스트를 작성하는 방법을 잘 모르겠습니다. 분명하지 않기 때문에 아마도 내 접근 방식이 잘못된 것 같습니다. 좀 더 구체적인 테스트를 작성하는 방법을 알아낼 수 있지만 이 테스트부터 시작하고 싶습니다.

이러한 오류가 나타나지 않도록 하려면 어떤 유형의 테스트를 작성해야 하나요?

해결책
  • 주요 변경으로 인해 편집하십시오 테스트하트 *

이후 0.11 버전 (via [스타우디오 블로그] (https://blog.rstudio.org/2015/10/15/testthat-0-11-0/)) 는 테스트 좁히어 직접 지원 부족 오류:

expect_error(myfun(), NA)

동일한 포착하기 위한 '경고' 와 '메시지':

expect_warning(myfun(), NA)
expect_message(myfun(), NA)

때는기대어 참고: '정보' 의 경우 점심시간요 루프 '기능을 추가 정보를 전달하는' expect_xxx 파라메트르 있습니다. 할 수 있도록.

for (i in 1:17) expect_error(myfun(), NA, info = paste("i =", i))
해설 (1)

다른 기대_오류로 감싸는 것도 좋습니다.

예시:

expect_error(1)
expect_error(expect_error(1))
해설 (2)

예를 들어

context("test error")
test_that("test error 1", {
  expect_true({log(10); TRUE})
})

test_that("test error 2", {
  expect_true({log("a"); TRUE})
})

는 오류가 있는지 테스트합니다.

> test_file("x.r")
test error : .1

    1. Error: test error 2 -------------------------
    Non-numeric argument to mathematical function
    1: expect_true({
           log("a")
        TRUE
    })
    2: expect_that(object, is_true(), info, label)
    3: condition(object)
    4: expectation(identical(x, TRUE), "isn't true")
    5: identical(x, TRUE)

이면 첫 번째 부분은 테스트를 통과했지만 두 번째 부분은 실패했음을 의미합니다.

해설 (5)

다음은 오류가 발생하지 않을 때 tryCatch0을 반환할 것이라는 기대를 사용하는 한 가지 해결책입니다:

expect_equal(tryCatch(for(i in 1:17) myfun()), 0)
해설 (0)