测试/和inst / tests / R包之间的区别

时间:2012-02-27 22:50:25

标签: r testing packages

我正在开发一个新的包,我有一些单元测试要写。 tests/inst/tests/之间有什么区别?应该分别使用哪些东西?

特别是,我在http://journal.r-project.org/archive/2011-1/RJournal_2011-1_Wickham.pdf中看到Hadley建议使用inst/tests/“这样的用户 还可以访问它们,“然后在tests/中添加一个引用来运行它们。但为什么不把它们全部放在tests/中?

2 个答案:

答案 0 :(得分:9)

@hadley的意思是在二进制包中,tests/不存在;它只在源包中。惯例是,inst/中的任何内容在安装时都会复制到程序包顶级目录中,因此inst/tests/将在二进制和已安装的程序包目录结构中以/tests的形式提供。

请参阅我的 permute 包作为示例。我使用@ hadley的 testthat 包作为学习经验和我的包测试。该套餐位于CRAN。抓住源代码tarball并注意它同时包含tests/inst/tests/,然后获取Windows二进制文件并注意到只有tests/并且它是inst/tests的副本在消息来源中。

严格来说,只有tests/R CMD check等运行,因此在开发过程中以及作为生产包中的检查,您需要tests/中的代码来测试包裹执行的声明或其他单位试验。您当然可以在tests/中运行代码/inst/tests/中运行R脚本实际执行测试,这样做会产生副作用,使测试代码可用于打包用户。

我看待事物的方式至少需要tests/,您是否需要inst/tests取决于您希望如何开发包以及您正在使用的单元测试代码/包。 inst/tests/是@hadley所倡导的东西,但它远远不是CRAN大部分的标准。

答案 1 :(得分:5)

正如'Writing R Extensions'所说,只安装了inst/tests。因此,只有那些可用于两者包的源版本及其二进制(已安装)表单的测试。

否则tests/当然适用于通常的R CMD check测试。现在,Martin Maechler曾经从tests/开发了一个'hook'脚本来使用inst/tests,我一直在我的一些软件包中使用它,允许在用户查看源代码时调用它们,以及事后。事实上,你可以将一组测试转移到另一组测试中,并充分利用这两个测试。

编辑:这是我们的RProtoBuf软件包从tests /:https://github.com/eddelbuettel/rprotobuf/blob/master/tests/runUnitTests.R调用inst / tests / tests所做的工作的链接。基本的想法是由于Martin所说的。