10

我正在寻找有关出色的最佳实践帮助testthatlibrary(xyzpackage)调用所有包功能的最佳位置在哪里?

我首先设置了一个runtest.R设置路径和包。然后我运行它只test_files(test-code.R)包含上下文和测试。结构示例如下:

# runtests.R
library(testthat)
library(data.table)

source("code/plotdata-fun.R")

mytestreport <- test_file("code/test-plotdata.R")

# does other stuff like append date and log test report (not shown)

在我的测试文件中,例如test-plotdata.R(精简版):

#my tests for plotdata
context("Plot Chart")

test_that("Inputs valid", {

  test.dt  = data.table(px = c(1,2,3), py = c(1,4,9))
  test.notdt <- c(1,2,3)

  # illustrating the check for data table as first param in my code
  expect_error(PlotMyStandardChart(test.notdt, 
                                   plot.me = FALSE),
                "Argument must be data table/frame")

  # then do other tests with test.dt etc...
})
  1. 这是@hadley 打算使用它的方式吗?从期刊文章中不清楚。我是否也应该在我的测试文件中复制库调用?您需要在每个上下文中设置一个库,还是只在文件开头设置一个库?

  2. 中过度调用 library(package) 可以吗?

  3. 要使用设置文件的最佳方式test_dir()和其他功能。我确实在我的函数中使用了 require(),但我还在上下文中设置了测试数据示例。(在上面的例子中,你会看到我需要 data.table 包供 test.dt 用于其他测试)。

谢谢你的帮助。

4

2 回答 2

7

一些建议/意见:

  • test_file设置每个文件,使其无需额外设置即可自行运行。这样,如果您只关注较大项目的一小部分,您可以在开发时轻松运行单个文件(如果运行所有测试都很慢,则很有用)
  • 多次调用几乎没有什么惩罚,library因为该函数首先检查包是否已经附加
  • 如果您将每个文件设置为可以使用 运行test_file,则test_dir无需执行任何其他操作即可正常工作
  • 您不需要library(testthat)在任何测试文件中,因为大概您正在使用test_fileor运行它们test_dir,这将需要testthat加载

此外,您可以查看 Hadley 最近的一个软件包,看看他是如何做到的(例如dplyrtests)。

于 2015-04-10T12:55:08.267 回答
0

如果您使用devtools::test(filter="mytestfile"),那么 devtools 将负责为您调用帮助文件等。通过这种方式,您不需要做任何特别的事情来使您的测试文件独立工作。基本上,这就像您运行测试一样,但仅test_mytestfile.R在您的testthat文件夹中。

于 2018-03-06T09:18:37.413 回答