gpt4 book ai didi

r - 获取 R 文件而不运行它(单元测试)

转载 作者:行者123 更新时间:2023-12-05 04:16:53 24 4
gpt4 key购买 nike

我们正在构建一个 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 中编写单元测试

# 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 中时运行?那里的缺点似乎是需要样板文件:一个用于流程的文件,一个用于函数的文件,以及一个用于运行测试的文件。

最佳答案

  1. 在每个脚本中,设置一个未定义的名称变量。请参阅 exists()。我喜欢 __name__

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

这个类似于python的结构

if __name__ == "__main__": main()

关于r - 获取 R 文件而不运行它(单元测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731753/

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