在RStudio中调试'testthat'测试

Ken*_*ams 14 testing debugging r rstudio testthat

在运行testthat测试时是否可以在RStudio中调用调试器?我无法找到允许此设置的设置(在设置中使用"使用devtools包功能"的各种组合,点击"Build - > More"菜单中的"Test Package"选项,test()在控制台中运行,投入browser()电话等),但还没有找到一种方法呢.

我还发现自己迷路了很多测试时,不确定是否正在运行已安装在系统库中的代码(做"构建和重新载入"),或正在运行就地从本地R目录,或者是什么-有时RStudio抱怨在重建包之前不能设置断点(所以我怀疑是前者)或者没有(所以我怀疑是后者).不确定这个问题是否与我的主要问题密切相关.

在没有找到进入调试器的方法的情况下,我最终将测试代码粘贴到控制台中并以非常特别的方式工作,并基本上将我的TDD习惯放在脚下.所以任何建议都会受到赞赏 - 如果无法调用调试器,任何建议的解决方法?

我在OS X上以本地模式运行RStudio版本0.99.447,使用R 3.2.1.

编辑 - 我也想知道更多关于选项的背景知识,例如"选项X永远不会支持调试,因为它在分叉的过程中运行,而是尝试使用其他选项Y".

更新 - 此处没有回复,我也在https://support.rstudio.com/hc/communities/public/questions/204779797-Debugging-testthat-tests-in-RStudio(我也没有响应).

ale*_*lev 17

以下适用于我:

  1. browser()在单元测试的测试中的某个地方插入一个调用.
  2. devtools::test()从RStudio控制台运行(而不是使用UI中的"测试包"菜单项)

然后,当测试运行器点击browser()调用时,您应该能够使用环境浏览器并逐步执行代码.

我还没有找到一种方法来测试在断点处停止,但插入browser()调用是一个非常接近的替代品.

为了确保您在加载软件包时从一致的状态开始,您可以关闭RStudio,重新打开它,运行"清理并重建",然后 devtools::test()

最后,如果您在RStudio包中工作,您可能需要查看来自RStudio支持的以下建议:

为了在包中有效地进行调试,您还需要确保使用--with-keep.source选项编译包.此选项是RStudio中新包的默认选项; 如果需要手动设置,可以在工具 - >项目选项 - >构建工具中找到它.

  • 我还是不愿意使用`browser()`方法-最近我团队中的某个人(不是我,谢天谢地!)在他们的代码中留下了一堆`browser()`语句,这些语句进入了生产,这很糟糕。只为检查代码而不得不更改代码真是太可惜了。尽管在这种情况下在测试文件中执行此操作并不那么糟糕-出于某些原因,在使用`devtools :: test()`时,断点在测试文件中不起作用,但它们在代码下的代码文件中有效`R /`目录。 (3认同)
  • 另外,根据以下讨论,这似乎是测试中缺乏对断点的支持,这是一个已知问题,但在撰写本文时尚未解决:[讨论1](https://groups.google.com/forum/ #!topic / rdevtools / pB9ovKCh-tQ),[讨论2](https://github.com/hadley/testthat/issues/116) (2认同)