【问题标题】:Difference between tests/ and inst/tests/ for R packagesR 包的 tests/ 和 inst/tests/ 之间的区别
【发布时间】:2017-10-21 00:13:43
【问题描述】:

我正在开发一个新包,并且我有一些单元测试要编写。 tests/ 和 inst/tests/ 有什么区别?每个应该放什么样的东西?

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

【问题讨论】:

    标签: r testing packages


    【解决方案1】:

    @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 的标准。

    【讨论】:

    • 哦,我明白了——我以为我看到的测试/实际上是来自开发人员的测试/。我没有意识到它是 inst/tests/.谢谢。
    • 好吧,让我们在第四段加点盐。这真的可以追溯到 Martin Maechler 最初为一些 Rmetrics 包所做的事情。 inst/tests 在 testthat 编写之前已使用 年。
    • @DirkEddelbuettel 感谢您的历史课;不知道这是由于马丁。尽管如此,仍然坚持下去;这远非标准,即使 Martin 和 Hadley 都使用它;-)
    • 他们都使用相同的idea。我认为哈德利平滑了一些边缘;通过 RUnit 的基本使用有点裸露,但是嘿,它可以工作......
    • 除此之外,我们再次给出了大致相同的答案,几乎是在同一时间。又一个跨大西洋的恶作剧:)
    【解决方案2】:

    正如“编写 R 扩展”所说,只有 inst/tests 被安装。因此,只有那些可以用于两个包的源版本及其二进制(已安装)形式的测试。

    否则tests/ 当然会用于通常的R CMD check 测试。现在,Martin Maechler 曾经从tests/ 开发了一个“挂钩”脚本来使用inst/tests,我一直在我的一些包中使用它,允许在用户查看源代码时调用它们,以及事后。因此,您实际上可以从一组测试转向另一组测试,并获得两全其美的效果。

    编辑:这是一个链接,指向我们的 RProtoBuf 包如何从 tests/ 中调用 inst/tests/ 测试:https://github.com/eddelbuettel/rprotobuf/blob/master/tests/runUnitTests.R 正如我所说的,基本想法归功于 Martin。 p>

    【讨论】:

    • 谢谢。我在 Google 上搜索了“martin maechler 测试脚本”,但没有找到您提到的内容,您还记得那可能在哪里吗?
    • 就像 Gavin 一样,我可以向您推荐我的包——当然除了 Martin 为之做的 R-Forge 上的 Rmetrics 包。至于我的,RQuantLib 会这样做,Rcpp* 包也是如此(由于 Romain 的一些出色工作,它甚至根据测试生成了一个小插图)。
    • 感谢@neal-fultz 修复了上面的网址。
    猜你喜欢
    • 2021-12-02
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2013-10-01
    • 2014-07-22
    • 2016-08-16
    相关资源
    最近更新 更多