2016-08-26 2 views
6

R 프로젝트에서 단위 테스트를 위해 testthat 라이브러리를 사용하고 있습니다. 나는 데이터베이스 쿼리에 의존하는 코드를 테스트하지만, 실제 쿼리 자체를 테스트하지 싶습니다. 즉, 데이터베이스 연결 및 쿼리를 조롱하거나 (미리 결정된 데이터 집합을 반환하거나 테스트 데이터베이스에 도달하도록)하고 싶습니다.단위 테스트를 위해 R로 데이터베이스 연결/쿼리를 만드는 방법

나는이 기능을 제공하는 루비와 다른 언어로 된 상당수의 보석을 알고있다. R에 대한 그런 것이 있습니까? 아니면 어떻게해야합니까?

some_file.R : 더 패키지이 편리이없는 경우, testthat::with_mock() 내 가장 좋은 건

test_that("test query", { 
    dataset <- sqlQuery("SELECT * FROM some_database_table") 
    #How to make this not actually hit the production database? 
    expect_equal(nrow(dataset), 2) 
}) 

입니다 : 테스트 파일에서

sqlQuery <- function(some_query) { 
     chnl <- odbcConnect(get.db.name()) 
     data <- sqlQuery(chnl, query) 
} 

?

library(testthat) 

sqlQuery <- function(some_query) { 
    chnl <- odbcConnect(get.db.name()) 
    data <- sqlQuery(chnl, query) 
} 

with_mock(sqlQuery = function(some_query) { 
      if (grepl("SELECT * FROM some_database_table", some_query, fixed = TRUE)) 
       return(mtcars[1:2,])  # could also be loaded from file via "load" after using "save" once 
      return(mtcars) # default return value 
      }, 
      { 
      # Calls the mocked function now... 
      dataset <- sqlQuery("SELECT * FROM some_database_table") 
      expect_equal(nrow(dataset), 2) 
      } 
) 
:

답변

0

단지 시뮬레이션 결과를 반환하여 sqlQuery 함수를 모의
관련 문제