簡體   English   中英

使用'testthat'測試包導出

[英]Testing package exports using 'testthat'

問題:如何在加載我的包的環境中運行testthat ,而不是繼承自我的包?

背景: testthat包運行測試“在一個繼承自包的命名空間環境的環境中”[參見test_check的文檔]。 這意味着它不能確保我已經正確地完成了我的出口,並且這幾次被咬了我。

例如,我的包中有以下代碼:

##' The foo() method
##' @param x object
##' @export
foo <- function(x)
  UseMethod('foo')

##' @rdname foo
foo.data.frame <- function(x) {
  message("foo data.frame")
}

##' @rdname foo
foo.default <- function(x) {
  message("foo default")
}

以下在我的測試中:

x <- 5:13
foo(x)

那個測試就好了。 但是如果用戶安裝了包,他們就會收到此錯誤:

Error in UseMethod("foo") : 
  no applicable method for 'foo' applied to an object of class "c('integer', 'numeric')"

解決方案是為這兩個方法添加@exports聲明,但是測試沒有捕獲到這一點真是@exports了。

我更傾向於從用戶的角度來運行我的所有測試,因為我傾向於搞砸我的導出。 也許可以添加一個選項來testthat:::run_tests ,它可以選擇所需的行為?

使用test_dir 我沒有使用test_check這個確切的原因。 在“/tests/run-tests.R”中(文件名無關緊要,只需要在該目錄中並以“.R”結尾)寫:

library(testthat)
library(<my package>)  # insert actual package name here
test_dir('testthat')   # assuming your tests are in "tests/testthat"

然后,為了運行您的測試:

setwd("<pkg dir>/tests")
source("run-tests.R")

或者從命令行:

cd <pkg-dir>/tests
Rscript run-tests.R

或者做R CMD buildR CMD check以這種方式運行測試。

如果您的測試不關心工作目錄,則不一定需要setwd 但是,如果他們這樣做,將復制由R CMD check設置的工作目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM