web-dev-qa-db-ja.com

testthatを使用した自動テストのデータはどこに置くべきですか?

パッケージの自動テストに Hadleyのtestthatベースのアプローチ を使用しています。

このアプローチでは、tests/testthatのテストスクリプトによってのみ使用され、R /の他の関数によっては使用されないファイルであるテストデータファイルを配置するのに最適な場所はどこですか?

私の現在のアプローチは、それらをtests/testdataに配置し、そこからsystem.fileではなく相対パスを使用してread.tableに配置することです(テストを実行するためにパッケージをインストールする必要を回避するため)。

これを行うための標準的な方法はありますか?

33
Aditya

ベンボルカーのコメントからの持ち上げ:

Inst/testdataを使用してから、system.file("testdata",...,package="my_package")を使用します

この方法の利点:

  • 特に多くのデータファイルやテストがある場合は、ファイル構造をきちんと保つことができます。
  • inst内のファイルがインストールされているという事実は、長年の標準的なRプラクティスです。 system.file("testdata", "some_file")が常に機能する方が../testdata/some_fileが機能するよりも安全なようです。 R CMD checkを実行するときに、相対ファイルパスを使用したときに悪い経験をしました。
  • Sathishの答えとは異なり、Rコードとして「保存」されているデータには依存しません。
23
user3603486
  • testsは、接頭辞が 'test _'のファイル内に保持されます
  • dataプレフィックスが 'helper _'のファイル内に保持されます

パッケージディレクトリとファイル構造:

└──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 ================================================================
15
Sathish

同じR-Pkgsの本の データの章 には、「小さなファイルをテストディレクトリに直接置いてもかまいません」と書かれています。それは私が過去にしたことです。そして、それはあなたがすでに行っていることのように聞こえます、そしてtestdataディレクトリ。

7
Dylan