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

时间:2016-03-11 13:39:03

标签: r unit-testing testthat

我正在写一个R包,我正在使用testthat进行单元测试。我的许多单元测试用于测试特定于我的包的特定对象的函数。对于这些测试,我已经创建了一个帮助函数来设置模拟对象。我还有一些其他辅助函数来减少单元测试中的代码量。

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

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

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

2 个答案:

答案 0 :(得分:20)

我理解tests/testthat/中以helper开头的文件来源于testthat运行任何测试之前。因此,您可以在helper-*.R内的适当名称tests/testthat/内放置辅助函数进行测试。

来自source_filetestthat

?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.

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

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

访问文件

答案 1 :(得分:0)

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

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