R 写入磁盘的测试包函数

R 写入磁盘的测试包函数,r,cran,testthat,R,Cran,Testthat,我正在尝试为R中的包函数编写一个测试 假设我们有一个函数,它使用writeLines()将字符串x写入磁盘: 这是测试它的好方法吗?在中,它声明包不应写入用户的主文件空间(包括剪贴板),也不应写入文件系统中R会话临时目录以外的任何其他地方。这个测试会违反这个约束吗 有一个expect\u output\u file函数。从文档和示例中,我不确定这是否是测试函数的更合适期望。它需要a.o.一个对象参数,该参数应该是要测试的对象。在我的例子中,要测试的对象是什么?看起来似乎违反了CRAN策略。为什么

我正在尝试为R中的包函数编写一个测试

假设我们有一个函数,它使用
writeLines()
将字符串
x
写入磁盘:

这是测试它的好方法吗?在中,它声明
包不应写入用户的主文件空间(包括剪贴板),也不应写入文件系统中R会话临时目录以外的任何其他地方。这个测试会违反这个约束吗


有一个expect\u output\u file函数。从文档和示例中,我不确定这是否是测试函数的更合适期望。它需要a.o.一个
对象
参数,该参数应该是要测试的
对象
。在我的例子中,要测试的对象是什么?

看起来似乎违反了CRAN策略。为什么不使用

file <-  tempfile()
?


至于这是否是一个好的测试:尝试重新读取文件,并确认读取的内容与写入的内容匹配,不是更好吗?这在你的玩具例子中很简单。在实际应用中可能会更困难,但将导入功能与导出功能结合起来始终是一个好主意。

该政策还规定“如果软件包获得用户的确认,则在交互式会话中可能允许有限的例外情况。”我不得不假设这包括隐含确认,例如,避免使用明确目的是写入磁盘的函数;否则,诸如和之类的包就永远不会出现在CRAN上,因为它们为用户设置了R包目录结构。您的问题中关于如何测试函数的部分对于堆栈溢出来说是一个很好的问题。询问CRAN策略的部分可能更适合于。如果能补充一个问题也很好:如何正确地向写入文件的函数添加示例可以使用“\dontrun{}”完成。好的一点,实际的文件将是PNG、JPEG或PDF,这使得测试更加困难。之后还需要清理临时文件,并避免测试失败而停止清理。我对CRAN的软件包有这个问题,CRAN不喜欢它。
library(testthat)

test_that("file is written to disk", {
 file = 'output.txt'
 expect_false(file.exists(file))

 exporting_function("This is a test",
                    file = file)


 expect_true(file.exists(file))

 expect_gt(file.info('output.txt')$size, 0)
})
file <-  tempfile()
file = 'output.txt'