public bigdata

[R 코드 및 기능] 유닛테스팅 본문

R programming

[R 코드 및 기능] 유닛테스팅

public bigdata 2018. 4. 29. 17:53

# 유닛 테스팅 : 코드의 일반적인 사용 상황과 특이한 사용 상황을 테스트하기 위함.####

# 모든 코드를 항상 유닛 테스트로 확인 할 수는 없음.

# install.packages("testthat")

library(testthat)

a=1:3

b=1:3

names(a)=c('a','b','c')


> a

a b c

1 2 3

> b

[1] 1 2 3



#expect_equal(object, expected) 오브젝트가 기대되는 값 익스펙티드와 동일한가

#두 객체가 (거의)같은지를 비교, 부동 소수의 경우 매우 작은 값 이하로 차이나는 두 값은 같은 값으로 취급

expect_equal(a,b) # 벡터에 부여한 이름이 다르므로 실패


#expect_equivalent() #equal 과 달리 속성값만

expect_equivalent(a,b) # 벡터에 부여한 이름을 무시하므로 테스트 성공 #두 객체가 동일 하다는 말


#expect_equal을 피보나치 수열을 이용해 예를 들어보자

fib=function(n){

  if(n==0){

    return(1)

  }

  if (n>0) {

    return(fib(n-1)+fib(n-2))

  }

}


#expect_equal이용해 fib(0)=1인지 확인

expect_equal(1,fib(0)) #무반응(무반응은 정상 이라는 말)

expect_equal(1,fib(1)) #오류메세지 반환.

결과>>


#이렇게 에러 메세지가 발생했다면 이에 따라 fib()함수를 올바르게 수정해나가면 된다.


#test_that을 사용한 테스트 그룹화####

#그룹화란 test_that 함수를 통해 expect 문장들을 묶어서 실행할 수 있다.

test_that("base case",{

  expect_equal(1,fib(0))

  expect_equal(1,fib(1))

})

결과>>


# 다음은 버그가 없도록 수정한 fibo에 대한 테스트 그룹화.

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

})