我们正在构建一个 R 代码库,并希望对我们编写的任何函数进行单元测试。到目前为止,我们已经为 R 找到了两个测试库:RUnit 和 testthat。
在进行了一些沙盒测试之后,我们开发了一种可靠的方法来在每次运行时测试代码。例如:
# sample.R
library(methods) #required for testthat
library(testthat)
print("Running fun()...")
fun <- function(num1, num2){
num3 = num1 + num2
return(num3)
}
expect_that(fun(1,2), equals(3))
很简单。但是,我们还希望能够在不运行定义它的脚本的情况下测试函数(例如在 makefile 中使用 unittest 标志)。为此,我们将在 test.R 中编写 unittests
# test.R
source("sample.R")
expect_that(fun(2,3), equals(5))
并运行它而不运行 sample.R 的其余部分。但是,当上面的代码运行时,不仅函数,而且 sample.R 中的其余代码都会运行,在这个例子中输出“Running fun()...”。有什么方法可以仅从文件中 source() 获取用户定义的函数吗?
如果不是,您是否建议将函数放在一个单独的文件中(例如,functions.R),该文件可以通过在 test.R 中进行单元测试并在 sample.R 中运行时运行?那里的缺点似乎是所需的样板:一个用于流程的文件,一个用于功能的文件,一个用于运行测试的文件。