gpt4 book ai didi

r - 使用 'testthat' 测试包导出

转载 作者:行者123 更新时间:2023-12-01 05:00:34 26 4
gpt4 key购买 nike

问题:我怎样才能得到testthat在加载我的包的环境中运行,而不是从我的包继承?

背景: testthat包运行测试“在从包的命名空间环境继承的环境中”[请参阅文档 test_check ]。这意味着它不能确保我正确地完成了我的导出,这让我咬了好几次。

例如,我的包中有以下代码:

##' The foo() method
##' @param x object
##' @export
foo <- function(x)
UseMethod('foo')

##' @rdname foo
foo.data.frame <- function(x) {
message("foo data.frame")
}

##' @rdname foo
foo.default <- function(x) {
message("foo default")
}

我的测试中的以下内容:
x <- 5:13
foo(x)

那测试就好了。但是如果用户安装了这个包,他们会得到这个错误:
Error in UseMethod("foo") : 
no applicable method for 'foo' applied to an object of class "c('integer', 'numeric')"

解决办法是把 @exports两种方法的声明,但令人遗憾的是测试没有发现这一点。

我更愿意从用户的角度运行我所有的测试,因为我有时会搞砸我的导出。也许可以在 testthat:::run_tests 中添加一个选项选择需要哪种行为?

最佳答案

使用 test_dir .我不使用 test_check正是出于这个原因。在“/tests/run-tests.R”(文件名无关紧要,它只需要在该目录中并以“.R”结尾)中写入:

library(testthat)
library(<my package>) # insert actual package name here
test_dir('testthat') # assuming your tests are in "tests/testthat"

然后,为了运行您的测试:
setwd("<pkg dir>/tests")
source("run-tests.R")

或者从命令行:
cd <pkg-dir>/tests
Rscript run-tests.R

或者做 R CMD buildR CMD check以这种方式运行测试。
setwd如果您的测试不关心工作目录,则不是绝对必要的。但是,如果他们这样做,将复制由 R CMD check 设置的工作目录。 .

关于r - 使用 'testthat' 测试包导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com