Adi*_*tya 32 automated-tests unit-testing r testthat
在这种方法中,最适合放置测试数据文件的地方是什么?我指的是仅由测试/测试中的测试脚本使用的文件,但不是R /中的任何其他函数.
我当前的方法是将它们放在tests/testdata中,然后使用相对路径而不是system.file从那里读取.(为了避免需要安装包来运行测试).
到目前为止,是否有任何最佳实践?
小智 26
取消Ben Bolker的评论:
我使用inst/testdata然后
system.file("testdata",...,package="my_package")
这种方法的优点:
inst安装文件的事实是长期规范的R实践; 似乎system.file("testdata", "some_file")总是比那更安全../testdata/some_file.这样做时我使用相对文件路径的经历很糟糕R CMD check.小智 25
我有同样的问题。我在github.com/r-lib/devtools中提交了一份报告,其中一位开发人员(Jenny Bryan)可以帮助解决这个问题!
\n解决方案是将所有测试数据放入“tests/testthat”或其某个子目录中。在测试中,您可以使用 testthat::test_path() 提供路径。使用这种方法,测试可以以两种方式进行,即交互式地和在 R-CMD-CHECK 或 devtools::check() 中!
\n例子:
\n封装结构
\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80pkg_name/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 DESCRIPTION\n ...\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 testthat.R\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testthat/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test-some_function.R\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 testdata\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 file_1.csv\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file_2.tif\nRun Code Online (Sandbox Code Playgroud)\n测试一些_函数.R
\ntest_that("testname", {\n expect_equal(\n some_function(\n test_path("testdata", "file_2.tif")\n ),\n ...\n )\n})\nRun Code Online (Sandbox Code Playgroud)\n
Sat*_*ish 16
包目录和文件结构:
???pkg_name/
??? DESCRIPTION
??? NAMESPACE
???.Rbuildignore
??? data/
??? man/
??? R/
??? vignettes/
??? tests/
??? testthat.R
??? testthat/
??? helper_myfunc1.R
??? helper_myfunc2.R
??? test_pkg_name.R
Run Code Online (Sandbox Code Playgroud)
testthat.R
library(testthat)
library(pkg_name)
test_check("pkg_name")
Run Code Online (Sandbox Code Playgroud)
helper_myfunc1.R包含用于测试myfunc1函数的数据
a1 <- 2
a2 <- 2
b1 <- 2*3
b2 <- 6
Run Code Online (Sandbox Code Playgroud)
helper_myfunc2.R包含用于测试myfunc2函数的数据
c1 <- 50/2
c2 <- 25
d1 <- c(2,3)
d2 <- c(2,3)
Run Code Online (Sandbox Code Playgroud)
test_pkg_name.R包含函数和包中其他对象的测试
context('pkg_name_functions')
test_that('myfunc1',
{
expect_identical(a1, a2)
expect_identical(b1, b2)
})
test_that('myfunc2',
{
expect_identical(c1, c2)
expect_identical(d1, d2)
})
Run Code Online (Sandbox Code Playgroud)
进行单元测试
library("devtools")
devtools::load_all()
# Loading pkg_name
devtools::test()
# Loading pkg_name
# Testing pkg_name
# pkg_name_functions: ....
# DONE ================================================================
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3735 次 |
| 最近记录: |