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