在哪里使用 testthat 进行库调用?
Where to place library calls with testthat?
我正在寻找出色的 testthat
的最佳实践帮助。放置 library(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...
})
这是@hadley 打算使用的方式吗?从journal article看不清楚。 我是否也应该在我的测试文件中复制库调用?你需要在每个上下文中设置一个库,还是只在文件开头设置一个?
可以在r中过度调用库(包)吗?
要使用 test_dir()
和其他功能什么是设置文件的最佳方式。我确实在我的函数中使用了 require(),但我也在上下文中设置了测试数据示例。 (在上面的示例中,您会看到我需要 data.table 包才能 test.dt 用于其他测试)。
感谢您的帮助。
一些建议/意见:
- 设置每个文件,这样它就可以 运行 独立于
test_file
而无需额外设置。这样,如果您只关注较大项目的一小部分,那么您可以在开发时轻松 运行 一个单独的文件(如果 运行 所有测试速度很慢,这很有用)
- 多次调用
library
几乎没有什么损失,因为该函数首先检查包是否已附加
- 如果您设置每个文件,使其可以 运行 与
test_file
,那么 test_dir
将正常工作而无需执行任何额外操作
- 您不需要在您的任何测试文件中
library(testthat)
,因为您可能 运行 使用 test_file
或 test_dir
将它们 test_dir
,这将需要 testthat
待加载
此外,您可以只看 Hadley 最近的一个包裹,看看他是如何做到的(例如 dplyr
tests)。
如果您使用 devtools::test(filter="mytestfile")
,那么 devtools 会为您调用帮助文件等。通过这种方式,您无需执行任何特殊操作即可让您的测试文件自行运行。基本上,这与您 运行 测试相同,但 testthat
文件夹中只有 test_mytestfile.R
。
我正在寻找出色的 testthat
的最佳实践帮助。放置 library(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...
})
这是@hadley 打算使用的方式吗?从journal article看不清楚。 我是否也应该在我的测试文件中复制库调用?你需要在每个上下文中设置一个库,还是只在文件开头设置一个?
可以在r中过度调用库(包)吗?
要使用
test_dir()
和其他功能什么是设置文件的最佳方式。我确实在我的函数中使用了 require(),但我也在上下文中设置了测试数据示例。 (在上面的示例中,您会看到我需要 data.table 包才能 test.dt 用于其他测试)。
感谢您的帮助。
一些建议/意见:
- 设置每个文件,这样它就可以 运行 独立于
test_file
而无需额外设置。这样,如果您只关注较大项目的一小部分,那么您可以在开发时轻松 运行 一个单独的文件(如果 运行 所有测试速度很慢,这很有用) - 多次调用
library
几乎没有什么损失,因为该函数首先检查包是否已附加 - 如果您设置每个文件,使其可以 运行 与
test_file
,那么test_dir
将正常工作而无需执行任何额外操作 - 您不需要在您的任何测试文件中
library(testthat)
,因为您可能 运行 使用test_file
或test_dir
将它们test_dir
,这将需要testthat
待加载
此外,您可以只看 Hadley 最近的一个包裹,看看他是如何做到的(例如 dplyr
tests)。
如果您使用 devtools::test(filter="mytestfile")
,那么 devtools 会为您调用帮助文件等。通过这种方式,您无需执行任何特殊操作即可让您的测试文件自行运行。基本上,这与您 运行 测试相同,但 testthat
文件夹中只有 test_mytestfile.R
。