[英]How to use R's testthat to unit test individual files?
我現在剛剛進入R單元測試並且發現它到目前為止很難進行滑雪橇。 我想做的是進入R控制台,鍵入test()
並測試我的R包中的所有文件的測試。
這是我的環境:
sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-apple-darwin15.2.0 (64-bit)
Running under: OS X 10.11.4 (El Capitan)
和目錄結構:
math
-- R
------ math.R
------ add.R
------ subtract.R
-- tests
------ testthat.R
------ testthat
---------- test_add.R
---------- test_subtract.R
---------- test_math.R
以下是相關文件的示例:
math.R
source('add.R')
source('subtract.R')
doubleAdd <- function(x){
return(add(x,x) + add(x,x))
}
add.R
add <- function(a,b){
return(a + b)
}
testthat.R
library(testthat)
library(math)
test_check("math")
test_add.R
context('add tests')
test_that('1 + 1 = 2', {
expect_equal(2, add(1,1))
})
錯誤:
在R控制台中,我得到以下結果:
library(devtools)
test()
<b>Loading math
Loading required package: testthat
Error in file(filename, "r", encoding = encoding) (from math.R#1) :
cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
cannot open file 'add.R': No such file or directory
</b>
但是,如果我通過setwd('R')
切換工作目錄並運行math.R, doubleAdd
函數就好了。 另外,如果我刪除math.R或將math.R移出'R'目錄, test()
工作正常。
我怎么設置這些文件讓test()
運行測試我的所有R文件?
如果您正在構建程序包,則不應使用source
。 您只需在NAMESPACE
文件中導出您的函數或使用roxygen為您執行此操作。 您可能會收到錯誤,因為它在您的工作目錄中查找add.R
這是一個從頭開始為我完成的基本軟件包設置。
add.R - 在R /目錄中
#' @export
add <- function(a,b){
return(a + b)
}
test_add.R - 在tests / testthat /目錄中
context('add tests')
test_that('1 + 1 = 2', {
expect_equal(2, add(1,1))
})
在控制台中運行
library(devtools)
# setup testing framework
use_testthat()
# update NAMESPACE and other docs
document()
# run tests
test()
Loading math
Loading required package: testthat
Testing math
add tests : .
DONE
注意 - 您實際上甚至不需要導出add
。 如果它是您正在測試的內部功能,它仍然可以工作。 只需停止在包中使用source
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.