簡體   English   中英

如何使用R的測試單元測試單個文件?

[英]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.

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