我正在创建一个具有标准目录层次结构的R包。在R目录中,我创建一个test子目录。
在R目录中,我创建了一个包含以下内容的uTest.R文件:
uTest <- function() {
test.suite <- defineTestSuite('test',
dirs = file.path('R/test'))
test.result <- runTestSuite(test.suite)
printTextProtocol(test.result)
}在R/test目录中,我创建了一个包含以下内容的runit.test.R文件:
test.validDim <- function() {
testFile <- "test/mat.csv"
generateDummyData(testFile,
10,
10)
checkEquals(validDim(testFile), TRUE)
}我在Rstudio中使用R CMD INSTALL --no-multiarch --with-keep.source RMixtComp构建和安装包。当我试图启动函数uTest()时,会收到以下错误消息:
1 Test Suite :
test - 1 test function, 1 error, 0 failures
ERROR in test.validDim: Error in func() : could not find function "checkEquals"但是,如果我在调用library(RUnit)之前调用了uTest(),那么一切都正常。在import文件的DESCRIPTION字段中,我添加了RUnit,在NAMESPACE文件中添加了import(RUnit)。
如何在加载包后直接调用uTest(),而不手动加载RUnit?
发布于 2015-12-15 05:11:35
您不应该将RUnit添加到描述文件中的“依赖”(或“导入”)字段中(尽管注释相反)。这样做意味着为了使用您的包,RUnit包是必要的,情况可能不是这样。换句话说,将RUnit放入“依赖”或“导入”意味着需要安装(导入)和用户的搜索路径(依赖),以便他们使用您的包。
您应该将RUnit添加到描述文件中的建议字段中,然后按如下所示修改uTest函数:
uTest <- function() {
stopifnot(requireNamespace("RUnit"))
test.suite <- RUnit::defineTestSuite('test', dirs = file.path('R/test'))
test.result <- RUnit::runTestSuite(test.suite)
RUnit::printTextProtocol(test.result)
}这样做可以让您在测试中使用RUnit,但不需要用户安装RUnit (可能在他们的搜索路径上)才能使用包。显然,如果他们想要运行您的测试,就需要RUnit。
https://stackoverflow.com/questions/34268946
复制相似问题