2

我们正在构建一个 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 中运行时运行?那里的缺点似乎是所需的样板:一个用于流程的文件,一个用于功能的文件,一个用于运行测试的文件。

4

1 回答 1

2
  1. 在每个脚本中,设置一个仅在尚未定义时才定义的名称变量。见exists()。我很喜欢__name__

  2. 在每个脚本中创建一个仅在名称正确时才运行的 main 函数。如果这是顶级脚本,此函数包含您只想运行的所有内容。

这类似于python的结构

if __name__ == "__main__": main()
于 2014-09-09T03:12:48.163 回答