2015-12-04 8 views
6

私はRのPKNCAパッケージに取り組んでいます。テストコードを開発する際には、いくつかのテストも良い例です。私はそれらを両方として保つ(テストと例)。テストにもコピーされるroxygen2のドキュメントに何かを埋め込む方法はありますか?roxygen2の例からテスト用の単体テストを自動的に生成できますか?

私が考えていることなどのドキュメントです:

#' @exampleTest 
#' set.seed(5) 
#' rnorm(1) ## -0.8409 

そして、それはのようなテスト生成されます。

expect_equal({set.seed(5) 
       rnorm(1)}, -0.8409, tol=1e-4) 

を(TOLは、それが数であるという事実から来て、例に示す桁数)

答えて

2

the check chapter of Hadley Wickham's book on packagesで説明したようにdevtools::run_examples()を使用してください。 R CMD CHECKを実行すると、関数の例がテストされます。これは、テストの一部ではなく、むしろ標準的なRパッケージ検査システムの一部です。

+0

のように見える、それは例がエラーなしで実行されたことを確認するように、これは見えますが、それは精度のテストを実行しますようにそれは見えません。正確さが求められる場所で私のサンプルを実行することができたと思いますが、テストフレームワークに直接入れるわけではありません。 今後の回答が他にない場合は、これを回答として設定します。しかし、私は例の正確さを確認する方法も望んでいます。 –

+0

より直接的に、 'testthat :: test_examples'はテスト中にpackageの中のサンプルを実行します。サンプルを実行しているときにエラーがない場合、テストは合格になります。 –

1

方法はありますが、好きなほど滑らかではありません。 @examplesブロック内にtestthat関数を呼び出す必要があります。ここでは例の機能があります:

#' @examples 
#' testStrings <- c("1234567890", 
#'     "123 456 7890") 
#' 
#' testthat::expect_equal(extractPhoneNumbers(testStrings), "0123") 
extractPhoneNumbers <- function(inputStr) { 
    # check input: 
    if (!is.character(inputStr)) { 
     stop("'inputStr' must be a (vector of) string(s)!") 
    } 

    # imports 
    `%>%` <- stringr::`%>%` 
    replace_all <- stringr::str_replace_all 
    extract_all <- stringr::str_extract_all 

    # intermediary regex's 
    visualDelimitersRegex <- "[()+\\-_. ]" 
    phoneNumberRegex <- "[:digit:]{10}" 

    inputStr %>% 
    replace_all(pattern = visualDelimitersRegex, replacement = "") %>% 
    extract_all(pattern = phoneNumberRegex) 
} 

あなたがdevtools::run_examples()devtools::checkを実行するとtestthat::expect_equal()の呼び出しがエラーをスローするので、両方がエラーをスローします。 devtools::checkから

出力例は、ドキュメントを読ん

*** SNIP *** 
* checking for unstated dependencies in examples ... OK 
* checking examples ... ERROR 
Running examples in ‘demoPkg-Ex.R’ failed 
The error most likely occurred in: 

> base::assign(".ptime", proc.time(), pos = "CheckExEnv") 
> ### Name: extractPhoneNumbers 
> ### Title: Extract Phone Numbers 
> ### Aliases: extractPhoneNumbers 
> 
> ### ** Examples 
> 
> testStrings <- c("1234567890", 
+     "123 456 7890") 
> 
> testthat::expect_equal(extractPhoneNumbers(testStrings), "0123") 
Error: extractPhoneNumbers(testStrings) not equal to "0123" 
Modes: list, character 
Length mismatch: comparison on first 1 components 
Component 1: 1 string mismatch 
Execution halted 
* checking for unstated dependencies in ‘tests’ ... OK 
* checking tests ... 
    Running ‘testthat.R’ 
OK 
* checking PDF version of manual ... OK 
* DONE 

Status: 1 ERROR 
+0

提案に感謝します。あなたが提案したように、それは私が望むほど滑らかではありません。サンプルを難読化するので、私はそれを使用するとは思わないが、私は例を使ってtestthatを使うと助けになると示唆している。 –

関連する問題