パッケージの自動テストに Hadleyのtestthatベースのアプローチ を使用しています。
このアプローチでは、tests/testthatのテストスクリプトによってのみ使用され、R /の他の関数によっては使用されないファイルであるテストデータファイルを配置するのに最適な場所はどこですか?
私の現在のアプローチは、それらをtests/testdata
に配置し、そこからsystem.fileではなく相対パスを使用してread.table
に配置することです(テストを実行するためにパッケージをインストールする必要を回避するため)。
これを行うための標準的な方法はありますか?
ベンボルカーのコメントからの持ち上げ:
Inst/testdataを使用してから、
system.file("testdata",...,package="my_package")
を使用します
この方法の利点:
inst
内のファイルがインストールされているという事実は、長年の標準的なRプラクティスです。 system.file("testdata", "some_file")
が常に機能する方が../testdata/some_file
が機能するよりも安全なようです。 R CMD check
を実行するときに、相対ファイルパスを使用したときに悪い経験をしました。パッケージディレクトリとファイル構造:
└──pkg_name/
├── DESCRIPTION
├── NAMESPACE
├──.Rbuildignore
├── data/
├── man/
├── R/
├── vignettes/
└── tests/
├── testthat.R
└── testthat/
└── helper_myfunc1.R
└── helper_myfunc2.R
└── test_pkg_name.R
testthat.R
library(testthat)
library(pkg_name)
test_check("pkg_name")
helper_myfunc1.R myfunc1関数をテストするためのデータが含まれています
a1 <- 2
a2 <- 2
b1 <- 2*3
b2 <- 6
helper_myfunc2.R myfunc2関数をテストするためのデータが含まれています
c1 <- 50/2
c2 <- 25
d1 <- c(2,3)
d2 <- c(2,3)
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)
})
ユニットテストを実施する
library("devtools")
devtools::load_all()
# Loading pkg_name
devtools::test()
# Loading pkg_name
# Testing pkg_name
# pkg_name_functions: ....
# DONE ================================================================
同じR-Pkgsの本の データの章 には、「小さなファイルをテストディレクトリに直接置いてもかまいません」と書かれています。それは私が過去にしたことです。そして、それはあなたがすでに行っていることのように聞こえます、そしてtestdata
ディレクトリ。