测试长时间运行的测试的testthat模式

13
我有一堆测试,不想在CRAN检查或Travis CI构建期间运行。 它们要么运行时间长,要么可能在向网络数据库写入时引发事务/并发冲突。 使用testthat,哪种方法最适合将它们(从R CMD check测试中)分离出来?
我应该把这些测试放在一个单独的文件夹里吗? 我应该使用正则表达式打标记他们的文件名吗? (例如使用filter参数在test_package中跳过测试 by @Jeroen) http://cran.r-project.org/web/packages/policies.html:

长时间运行的测试和vignette代码可以选择进行检查,但确保剩余的检查确实测试了软件包的所有功能。


1
如果您将它们放在测试目录中的另一个目录中,则仍然可以使用test_dir()手动测试它们,但它们不会在test()R CMD check中运行。例如,R6有一些手动测试:https://github.com/wch/R6/tree/master/tests - Gabor Csardi
жҲ‘е–ңж¬ў@GaborCsardiзҡ„еҒҡжі•пјҢжөӢиҜ•з”ЁдҫӢйҖҡиҝҮtest()е’Ңtest_dir()иҝӣиЎҢеҢәеҲҶпјҢдҪҶжҳҜеҸҲиў«еҢ…еҗ«еңЁдёҖиө·гҖӮ - wibeasley
@GaborCsardi,这正是我在寻找的,并且针对我的软件包需求工作良好。如果您将您的评论更改为答案,我想给您的回复评分。 - wibeasley
2个回答

8

提示:现在的testthat 0.9版本已经添加了一个skip()函数。

但是,我似乎无法确切地弄清楚如何/在哪里使用它。如果将其放在我的test_that()函数中,测试仍然运行。如果你把它放在testthat()之前,那么skip()会抛出一个错误。


1
谢谢提醒——我几天前看到了发布公告。在测试函数内部,我立即添加了类似于testthat::skip_on_cran()的内容。这对我的一些测试来说非常合适,因为我想要一些手动测试的主要原因是,如果服务器此时不太灵活,它就不会被CRAN拒绝。我并不真的在意Travis-CI或R-Forge检查失败,因为重新运行很容易。 - wibeasley
5
请问您是如何使用 skip() 和/或 skip_on_cran() 的呢?在运行test_package() 或是 RStudio 中的 Ctrl+Shift+T 时,我需要将它放在哪里才能让特定的测试跳过呢?请您告诉我具体的使用方式。 - Rappster
2
这里是一个链接到测试代码的页面。要运行它,我可以使用 CTRL+SHIFT+E 检查包或者只运行测试 test_results_checked <- devtools::test() - wibeasley
谢谢,伙计。我就是这样做的,但不知道为什么一开始没成功,现在好了;-) 可能是其他原因。 - Rappster
3
请注意,跳过(至少在当前开发版本中)需要一个消息参数。例如,在test_that(内部使用if(is.friday(today())) skip(“Not today.”) - jan-glx

7
如果你把它们放在tests目录下的另一个目录中,那么你仍然可以使用test_dir()手动测试它们,但它们不会在test()R CMD check中运行。
例如:R6有一些手动测试:https://github.com/wch/R6/tree/master/tests

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接