R testthat 单元测试数据和辅助函数约定

R testthat unit test data and helper function conventions

我正在编写一个 R 包,我正在使用 testthat 进行单元测试。我的许多单元测试都是为了测试在特定于我的包的特定对象上工作的函数。对于这些测试,我制作了一个辅助函数来设置模拟对象。我还有一些其他辅助函数可以减少单元测试中的代码量。

目前这些辅助函数在我的 R/ 文件夹中,因为之后它们可用于我的单元测试文件(在 tests/testthat/ 中)。我觉得将仅用于单元测试的函数放在 R/ 文件夹中有点奇怪。如果可以将它们放在 tests/ 文件夹中的某个位置,那就太好了。但似乎这样做会使它们在单元测试期间不可用。请注意,这些辅助函数用于多个不同的测试文件,因此仅将辅助函数放在一个包含单元测试的文件的顶部并不是解决方案。

另一个相关的问题是将用于单元测试的数据文件放在哪里。例如,我的一些函数在 limma 包(在 Bioconductor 上可用)中的 ExpressionSet 对象上工作,我在单元测试期间使用 load() 函数加载到 R 中。目前我将它们放在 inst/extdata 文件夹中,因为这样我就可以在单元测试期间使用 system.file() 访问它们。此文件夹还包含其他数据文件,供包的用户使用。我发现将我的测试数据(不是为最终用户准备的)与包数据(为最终用户准备的)放在同一个地方有点奇怪。

所以我的问题是,是否可以将单元测试辅助函数和测试数据全部放在 tests/ 目录中。如果是这样,我如何从单元测试中访问这些文件?单元测试助手和单元测试数据的最佳 practices/conventions 是什么?

也许对您有帮助:https://github.com/gmum/gmum.r/tree/master/tests/testthat

在文件 combinations.R 中有一个名为 combinations 的辅助函数 然后它被包含在 test_cec_centroid_assignment.R 中使用 source('combinations.R') 我不确定这是一个好的约定,但它有效。

我了解到 tests/testthat/ 中以 helper 开头的文件是在 运行 testthat 的任何测试之前获取的。因此,您可以将用于测试的辅助函数放置在 tests/testthat/.

中适当命名的 helper-*.R

来自 source_file 的 R 帮助 来自 testthat (?testthat::source_file)

 The expectation is that the files can be sourced in alphabetical
 order. Helper scripts are R scripts accompanying test scripts but
 prefixed by ‘helper’. These scripts are once before the tests are
 run.

可以在 github 上的 source code for dplyr 中看到示例。

至于测试数据。我遵循这个问题的一条评论的建议:Where to put data for automated tests with testthat? 并使用 inst/testdata,然后使用 system.file("testdata",...,package="my_package")

访问文件