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))
    + })
    

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

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