如何在R中使用`withr::defer()`而不是`testthat::setup()`?

问题描述

我想了解 setup() 第 3 版中 teardown()testthat 的当前替代品是什么。我发现 this blog post 中有人讨论过 setup()teardown() 已被弃用,以支持测试修正

我检查了那个帖子和另一个推荐的帖子(即this one), 并且建议使用 withr::defer()。但是,我不完全明白。

假设我进行了两个简单的测试。每个测试都依赖于获取一些外部资源,然后执行检查。

# First test.
test_that("..." {
    # Super long process to get this data.
    data <- matrix(rnorm(9),3,3)

    # My test.
    expect_equal(nrow(data),3)
})

# Second test.
test_that("..." {
    # Super long process to get this data.
    data <- matrix(rnorm(9),3)

    # My test.
    expect_equal(ncol(data),3)
})

通常,我会使用 setup() 执行生成 data 对象的密集过程,并确保该对象可用于该文件中的所有测试。像这样:

setup({
    # Super long process to get this data.
    data <- matrix(rnorm(9),3)
})

然后,我会继续我的测试。

# First test.
test_that("..." {
    expect_equal(nrow(data),3)
})

# Second test.
test_that("..." {
    expect_equal(ncol(data),3)
})

为了这个问题,让我们假设我不能将这两个测试压缩在一起。 如何使用 withr::defer() 实现与上述 setup() 相同的行为?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...