如何在R中为单元测试建立数据库连接/查询
我在R项目中使用如何在R中为单元测试建立数据库连接/查询,r,testthat,R,Testthat,我在R项目中使用testthat库进行单元测试。我想测试依赖于数据库查询的代码,但不测试实际查询本身。换句话说,我想模拟数据库连接和查询(让它们返回预先确定的数据集或访问测试数据库) 我知道Ruby中有很多宝石,以及其他语言中的其他等价物,都提供了这种功能。R有类似的吗?或者我应该如何去实现它 一些\u文件.R: sqlQuery <- function(some_query) { chnl <- odbcConnect(get.db.name())
testthat
库进行单元测试。我想测试依赖于数据库查询的代码,但不测试实际查询本身。换句话说,我想模拟数据库连接和查询(让它们返回预先确定的数据集或访问测试数据库)
我知道Ruby中有很多宝石,以及其他语言中的其他等价物,都提供了这种功能。R有类似的吗?或者我应该如何去实现它
一些\u文件.R:
sqlQuery <- function(some_query) {
chnl <- odbcConnect(get.db.name())
data <- sqlQuery(chnl, query)
}
sqlQuery只需通过返回模拟结果来模拟sqlQuery
函数:
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)
}
)
库(testthat)
sqlQuery如果您愿意相信SQLite与其他数据库讲的是相同的SQL(大多数情况下是这样),那么您可以模拟本地SQLite数据库并调用它。一个优点是您可以使用类似的工具轻松编辑数据库内容和测试结果
这将是实施的东西的影响
# SQLite support & init
library(DBI)
library(RSQLite)
putSQLiteHere <- "myRsqlite.sqlite" # could also be ":memory:"
mySQLiteDB <- dbConnect(RSQLite::SQLite(),putSQLiteHere)
sqlQuery <- function(some_query) {
data <- dbGetQuery(mySQLiteDB,some_query)
}
#SQLite支持和初始化
图书馆(DBI)
图书馆(RSQLite)
放在这里
# SQLite support & init
library(DBI)
library(RSQLite)
putSQLiteHere <- "myRsqlite.sqlite" # could also be ":memory:"
mySQLiteDB <- dbConnect(RSQLite::SQLite(),putSQLiteHere)
sqlQuery <- function(some_query) {
data <- dbGetQuery(mySQLiteDB,some_query)
}