23

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

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

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

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

4

2 回答 2

27

我知道以tests/testthat/开头的文件helper是在 testthat 运行任何测试之前获取的。因此,您可以将测试的辅助函数放置在适当命名的 insidehelper-*.Rtests/testthat/

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

 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.

在on的源代码中dplyr可以看到一个示例github

至于测试数据。我遵循这个问题的一条评论的建议:使用 testthat 在哪里放置自动化测试的数据?并使用inst/testdata,然后使用system.file("testdata",...,package="my_package")

于 2017-01-21T09:34:32.043 回答
0

也许它会帮助你:https ://github.com/gmum/gmum.r/tree/master/tests/testthat

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

于 2016-03-14T21:33:45.130 回答