더북(TheBook)

test_that을 사용한 테스트 그룹화

서로 관련된 내용을 테스트하는 expect 문장들은 test_that( ) 함수를 사용해 그룹으로 묶을 수 있다. 이렇게 하면 연관된 테스트가 하나의 블록으로 묶이므로 테스트 코드를 보기 좋게 구조화할 수 있다.

표 5-18 테스트 그룹화

testthat::test_that : 테스트를 생성한다.

test_that::test_that(
  desc,  # 테스트 이름
  code   # 테스트 코드
)

예를 들어, 피보나치 수열의 처음 두 개 값은 각각 1로 정해지는데, 이를 “base test”라 명명해 다음과 같이 묶을 수 있다.

> test_that("base case", {
+   expect_equal(1, fib(0))
+   expect_equal(1, fib(1))
+ })

fib(2) 이상은 재귀적으로 실행되므로 이를 “recursion test”라고 명명해 따로 묶을 수 있다. 다음은 버그가 없도록 수정한 fibo( ) 함수와 이를 base test와 recursion test로 나눠 테스트하는 예를 보여준다.

> fib <- function(n) {
+   if (n == 0 || n == 1) {
+     return(1)
+   }
+   if (n >= 2) {
+     return(fib(n-1) + fib(n-2))
+   }
+ }

> test_that("base test", {
+   expect_equal(1, fib(0))
+   expect_equal(1, fib(1))
+ })

> test_that("recursion test", {
+   expect_equal(2, fib(2))
+   expect_equal(3, fib(3))
+   expect_equal(5, fib(4))
+ })

테스트 중 아무런 오류도 발견되지 않았으므로 위 코드의 수행 시 특별히 출력되는 내용은 없다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.