【问题标题】:Is it possible to determine test order in testthat?是否可以在 testthat 中确定测试顺序?
【发布时间】:2016-01-01 02:57:06
【问题描述】:

我正在使用testthat 来检查我的包中的代码。我的一些测试是针对基本功能的,例如构造函数和 getter。其他的则是建立在基本功能之上的复杂功能。如果基本测试失败了,那么复杂的测试也会失败,所以没有必要进一步测试。

是否可以:

  1. 确保始终先完成基本测试
  2. 使测试失败停止测试过程

【问题讨论】:

    标签: r unit-testing testthat


    【解决方案1】:

    要回答您的问题,我认为只能通过对您的 test-*.R 文件进行适当的字母数字命名来确定它。

    来自testthat 源,这是 test_package 通过 test_dir 调用的函数来获取测试:

    find_test_scripts <- function(path, filter = NULL, invert = FALSE, ...) {
      files <- dir(path, "^test.*\\.[rR]$", full.names = TRUE)
    

    不管怎样,让复杂的任务先失败有什么问题?

    【讨论】:

    • “怎么了……”?我的第一个想法是“计算时间”,寻找快速失败的副长时间等待。 (我的一个项目不可避免地需要 15-20 分钟来运行所有测试。此外,我在测试之间存在依赖关系:一个测试设置环境,其他测试重用组件。在我的情况下,将测试分成多个文件很有用,诚然不是全部。)
    • 公平点。这很棘手,但可以划分测试,如果这对您很重要,那么只有其中一些在 CRAN 测试上运行。运行一个特定的测试套件只需要一个命令行参数,但根本不与 Rstudio 集成,并且在两个组之间共享测试内容,或者使用 testthat,可能都只需要大量的维护和破坏。因此我同意你的看法!
    【解决方案2】:

    要测试的最近(ish)开发是parallel test processing

    这可能不适合您的情况,因为听起来您可能在测试之间存在复杂的相互依赖关系。如果您可以隔离您的测试(无论如何我认为这将是更常见的情况),那么并行处理是一个很好的解决方案,因为它应该加快整体处理时间,并且可能会在“慢”之前向您展示“快速”测试失败测试已完成。

    【讨论】:

      【解决方案3】:

      关于测试顺序,您可以使用说明文件中的 testthat 配置来确定测试顺序(按文件) - 正如文档所建议的那样

      默认情况下 testthat 按字母顺序启动测试文件。如果您有一些测试文件比其他文件花费的时间更长,那么这可能不是最佳顺序。理想情况下,慢速文件会首先启动,因为整个测试套件将花费至少与其最慢的测试文件一样多的时间。您可以使用说明中的 Config/testthat/start-first 选项更改顺序。例如 testthat 当前有:

      Config/testthat/start-first: watcher, parallel*
      

      Docs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-26
        • 1970-01-01
        • 2012-02-12
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 2016-06-13
        相关资源
        最近更新 更多