r - testhat - 如何存储预期结果?
问题描述
假设我想使用包为以下函数编写单元测试testthat
:
make_matrix = function(vec) {
matrix(vec, nrow=2)
}
预期的功能如下:
make_matrix(seq(1:4))
[,1] [,2]
[1,] 1 3
[2,] 2 4
按照关于 SO 的建议,我将把测试函数的输入存储在inst/testdata
我应该在哪里使用 testthat 为自动化测试放置数据?
#input = system.file("testdata/input.rds, package "my_package")
input = seq(1:4)
# expected_output_for_seq_1_4 = readRDS()/system.file()?
expected_output_for_seq_1_4 = matrix(c(1,2,3,4), nrow=2)
test_that("basic_test", {
expect_equal(make_matrix(input), expected_output_for_seq_1_4)
})
但是我应该在哪里以及如何存储预期的输出?也在inst/testdata
? 给定一个更复杂的函数,取决于函数的参数,单个输入可能会有许多预期输出
解决方案
我想出了两个选择:
选项 1:Rdata
文件位于inst/testdata
根据链接问题中最被接受的答案,我会将其保存在 中inst/testdata
,但使用允许将多个对象保存在一个文件中的 RData 文件。这样,您可以将相关测试的所有预期输出保存在同一个文件中:
inst/testdata/expected_outputs_function1.Rdata # contains all the outputs for function1
inst/testdata/expected_outputs_function2.Rdata # contains all the outputs for function2
选项 2:R 文件即时生成输出
但是,如果项目/包很复杂,或者需要大的预期输出,则前面的方法可以生成超出CRAN 包大小策略的 RData文件(仅当您要将包上传到 CRAN 时才相关)。因此,其他选项是将生成预期输出的代码存储在并在执行测试之前inst/testdata/expected_outputs.R
添加
:source(system.file("testdata/expected_outputs.R", package "my_package"))
预期输出.R
expected_output_for_seq_1_4 <- matrix(c(1,2,3,4), nrow=2)
expected_output_for_data_frame <- {code to generate output for data_frame here}
{...}
这种方法的缺点是,如果预期的输出需要很长时间来计算,测试就不会很快。
推荐阅读
- macos - 如何在 shift + tab 上的终端中向后启用自动完成功能?
- ethereum - 如何测试由另一个已部署合约生成的合约?
- r - R中的Mapdist在传递坐标时返回错误
- sql - 如何处理在 DoCmd.RunSQL(INSERT INTO...) 之后找到的 0 行
- ansible - 从 stdout_lines 获取特定输出并将其存储在列表中
- mysql - 遇到 PHP 错误 严重性:通知消息:未定义的索引
- biztalk - BizTalk 2016 单例
- python-3.x - Matplotlib - 添加线以链接堆积条形图类别
- c# - 如何通过在两个一维数组之间的索引上设置 if 语句来执行操作?
- cmd - 使用批处理将文件从一台服务器复制到另一台服务器