2016-08-26 5 views
6

Rプロジェクトでユニットテストにtestthatライブラリを使用しています。私は、データベースクエリに依存するコードをテストしたいが、実際のクエリ自体はテストしない。言い換えれば、私はデータベース接続とクエリを模擬したいのです(あらかじめ決められたデータセットを返すかテストデータベースをヒットさせる)。ユニットテストのためにRでデータベース接続/クエリを作成する方法

Rubyにはたくさんの宝石があり、この機能を提供する他の言語の同等のものがあることは確かです。 Rのようなものはありますか?または、それを達成するためにどうすればいいですか?

some_file.R:

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

テストファイルから:

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

このための便利な一切のパッケージが存在しない場合は、testthat::with_mock()私の最善の策でありますか?

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機能をモック
関連する問題