写入磁盘的测试包功能

时间:2018-10-31 10:08:32

标签: r cran testthat

我正在尝试为R中的包功能编写测试。

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

exporting_function <- function(x, file) {

 writeLines(x, con = file)

 invisible(NULL)
}

一种测试方法是检查文件是否存在。通常,它最初不应该存在,但是在运行导出功能后应该存在。另外,您可能需要测试文件大小是否大于0:

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)
})

这是测试它的好方法吗?在CRAN Repository Policy中声明为Packages should not write in the user’s home filespace (including clipboards), nor anywhere else on the file system apart from the R session’s temporary directory。此测试会违反此约束吗?

有一个Expect_output_file函数。从文档和示例中,我不确定这是否是测试功能的更合适的期望。它需要一个object参数,应为object to test。我要测试的对象是什么?

1 个答案:

答案 0 :(得分:1)

这似乎违反了CRAN政策。为什么不使用

简单地写入临时目录
file <-  tempfile()

代替

file = 'output.txt'

关于它是否是一个很好的测试:尝试重新读回文件并确认所读取的内容与所写的内容匹配会更好吗?在您的玩具示例中这很容易。在实际中可能会比较困难,但是将导入功能与导出功能配对总是一个好主意。