test_that 和 readline() 的 R 包代码覆盖率
R package code coverage with test_that and readline()
早上好,
我正在构建一个 R 包并尝试尽可能高地获得代码覆盖率(通过 codecov)。但是,当函数需要通过 readline() 输入时,我很难使用 test_that。这是一个以与我的类似的方式使用 readline() 的简化函数。
fun<-function(){
y<-as.numeric(readline((prompt="Enter a number: ")))
res<-2*y
res
}
有什么方法可以将 test_that()
与此函数一起使用,而无需在每次运行时手动输入数字?比如,设置一个默认的输入号码只为测试?
谢谢!
来自?readline()
:
This [function] can only be used in an interactive session.
在这种情况下,我可能会将我的函数重写为如下内容:
fun <- function(y = readline(prompt = "Enter a number: ")) {
y <- as.numeric(y)
res <- 2 * y
res
}
当以交互方式使用时,它的工作原理是一样的,但是当您想测试该功能时,您可以通过编程方式进行,例如:
expect_equal(
fun(y = 10),
20
)
其他替代方法是在您的包中包含一些选项或一个环境变量,告诉您的代码您处于测试模式,并改变 fun()
的行为。参见例如this answer 在 SO.
早上好, 我正在构建一个 R 包并尝试尽可能高地获得代码覆盖率(通过 codecov)。但是,当函数需要通过 readline() 输入时,我很难使用 test_that。这是一个以与我的类似的方式使用 readline() 的简化函数。
fun<-function(){
y<-as.numeric(readline((prompt="Enter a number: ")))
res<-2*y
res
}
有什么方法可以将 test_that()
与此函数一起使用,而无需在每次运行时手动输入数字?比如,设置一个默认的输入号码只为测试?
谢谢!
来自?readline()
:
This [function] can only be used in an interactive session.
在这种情况下,我可能会将我的函数重写为如下内容:
fun <- function(y = readline(prompt = "Enter a number: ")) {
y <- as.numeric(y)
res <- 2 * y
res
}
当以交互方式使用时,它的工作原理是一样的,但是当您想测试该功能时,您可以通过编程方式进行,例如:
expect_equal(
fun(y = 10),
20
)
其他替代方法是在您的包中包含一些选项或一个环境变量,告诉您的代码您处于测试模式,并改变 fun()
的行为。参见例如this answer 在 SO.