2015-12-04 11 views
6

मैं आर के लिए पीकेएनसीए पैकेज पर काम कर रहा हूं। परीक्षण कोड विकसित करते समय, कुछ परीक्षण भी अच्छे उदाहरण होंगे। मैं उन्हें दोनों (परीक्षण और उदाहरण) के रूप में रखना चाहता हूं। क्या कोई तरीका है कि मैं roxygen2 दस्तावेज के भीतर कुछ एम्बेड कर सकता हूं जो परीक्षण में भी कॉपी हो जाएगा?क्या मैं स्वचालित रूप से roxygen2 उदाहरणों से testthat के लिए यूनिट परीक्षण उत्पन्न कर सकता हूं?

क्या मैं के बारे में सोच रहा हूँ है प्रलेखन की तरह:

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

और ऐसे ही एक परीक्षण उत्पन्न होगा:

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

(सहने तथ्य यह है कि यह एक नंबर और है से आया उदाहरण में दिखाए गए अंकों की संख्या।)

उत्तर

2

में बताए गए अनुसार devtools::run_examples() का उपयोग करें। जब आप आर सीएमडी चेक चलाते हैं तो फ़ंक्शन उदाहरणों का परीक्षण किया जाता है। यह testthat का हिस्सा नहीं है बल्कि मानक आर पैकेज जांच प्रणाली के बजाय है।

+0

तरह प्रलेखन पढ़ना, यह लगता है कि यह पुष्टि करेगा कि उदाहरण त्रुटियों के बिना भाग गया है, लेकिन यह नहीं लगता है जैसे कि यह सटीकता परीक्षण प्रदर्शन करेंगे। मुझे लगता है कि मैं अपने उदाहरण चला सकता हूं जहां उन्हें सटीकता की आवश्यकता होती है, लेकिन यह सीधे परीक्षण ढांचे में नहीं डालती है। यदि अन्य उत्तर आने वाले अन्य उत्तर नहीं हैं, तो मैं इसे उत्तर के रूप में सेट करूंगा। लेकिन, मैं भी उदाहरणों की सटीकता की पुष्टि करने के लिए एक तरीका की उम्मीद कर रहा हूं। –

+0

अधिक सीधे, 'testthat :: test_examples' परीक्षण के दौरान पैकेज में उदाहरण चलाएगा। उदाहरण चलते समय कोई त्रुटि नहीं होने पर परीक्षण पास होते हैं। सुझाव के लिए –

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

धन्यवाद। जैसा कि आपने सुझाव दिया है, यह उतना आसान नहीं है जितना मैं चाहूंगा। चूंकि उदाहरण को खराब कर देगा, मुझे नहीं लगता कि मैं इसका उपयोग करूंगा, लेकिन मैंने सुझाव दिया है कि उदाहरणों के साथ टेस्टथैट का उपयोग करने से मदद मिल सकती है। –

संबंधित मुद्दे

 संबंधित मुद्दे