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))
예를 들어
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)
이면 첫 번째 부분은 테스트를 통과했지만 두 번째 부분은 실패했음을 의미합니다.