2015-09-01 3 views
16

मैं अपने पैकेज के स्वचालित परीक्षण के लिए Hadley's testthat-based approach का उपयोग कर रहा हूं।टेस्टथैट के साथ स्वचालित परीक्षणों के लिए डेटा कहां रखा जाए?

इस दृष्टिकोण के भीतर, परीक्षण डेटा फ़ाइलों को रखने के लिए सबसे उपयुक्त स्थान क्या है? मेरा मतलब है कि केवल परीक्षण/testthat में परीक्षण स्क्रिप्ट द्वारा उपयोग की जाने वाली फ़ाइलें), लेकिन आर/में किसी भी अन्य कार्यों द्वारा नहीं।

मेरा वर्तमान दृष्टिकोण उन्हें परीक्षण/testdata में रखना है, और उसके बाद system.file (परीक्षण चलाने के लिए पैकेज को स्थापित करने की आवश्यकता से बचने के लिए) के बजाय एक सापेक्ष पथ के साथ read.table है।

अब तक कोई भी सर्वोत्तम प्रथा क्रिस्टलाइज्ड है?

+3

हां, मुझे लगता है कि डेटा को '/ test/testdata/'में डालकर और फिर लोडिंग के साथ अपना दृष्टिकोण, उदाहरण के लिए,' read.csv (" ../ testdata/test1.csv ") बेहतर है। मैंने जांच की है कि फ़ोल्डर 'testdata' में अतिरिक्त फ़ाइलों को भी फ्लैग '--install-test' के साथ पैकेज बनाया और स्थापित करने के बाद लाइब्रेरी निर्देशिका में कॉपी किया गया है। उत्तरार्द्ध महत्वपूर्ण है क्योंकि परीक्षण आईएमएचओ पैकेज के साथ वितरित किया जाना चाहिए। – cryo111

+10

मैं 'inst/testdata' और फिर' system.file ("testdata", ..., package = "my_package") का उपयोग करता हूं ' –

उत्तर

7
  • परीक्षण जो 'test_'
  • डेटा लगी होती है एक फ़ाइल के अंदर रखा जाता है 'helper_'

उपसर्ग के साथ फ़ाइलों के अंदर रखा जाता है पैकेज निर्देशिका और फ़ाइल संरचना:

└──pkg_name/ 
    ├── DESCRIPTION 
    ├── NAMESPACE 
    ├──.Rbuildignore 
    ├── data/ 
    ├── man/ 
    ├── R/ 
    ├── vignettes/ 
    └── tests/ 
     ├── testthat.R 
     └── testthat/ 
      └── helper_myfunc1.R 
      └── helper_myfunc2.R 
      └── test_pkg_name.R 

testthat.R

library(testthat) 
library(pkg_name) 
test_check("pkg_name") 

helper_myfunc1.R परीक्षण myfunc1 समारोह के लिए डेटा है

a1 <- 2 
a2 <- 2 
b1 <- 2*3 
b2 <- 6 

helper_myfunc2.R परीक्षण myfunc2 समारोह के लिए डेटा है

c1 <- 50/2 
c2 <- 25 
d1 <- c(2,3) 
d2 <- c(2,3) 

test_pkg_name.R पैकेज में कार्य करता है और अन्य वस्तुओं के लिए परीक्षण शामिल

context('pkg_name_functions') 

test_that('myfunc1', 
      { 
      expect_identical(a1, a2) 
      expect_identical(b1, b2) 
      }) 

test_that('myfunc2', 
      { 
      expect_identical(c1, c2) 
      expect_identical(d1, d2) 
      }) 

आचार इकाई परीक्षण

library("devtools") 

devtools::load_all() 
# Loading pkg_name 

devtools::test() 
# Loading pkg_name 
# Testing pkg_name 
# pkg_name_functions: .... 

# DONE ================================================================ 
+1

आप अपनी टेस्ट स्क्रिप्ट test_pkg_name.R कहां बताते हैं, जहां डेटा है? जैसा कि आपका उत्तर अब है, आपको एक त्रुटि मिलनी चाहिए उदा। ए 1 नहीं मिला (मान लीजिए कि आप 'devtools :: test_all() 'के बिना सीधे' devtools :: test()' चलाते हैं? मैं अक्सर अपने सरल [वर्कफ़्लो चित्रण] में http: // हैडली द्वारा सुझाए गए परीक्षण को चलाता हूं r-pkgs.had.co.nz/tests.html) – Triamus

4

ही आर-pkgs पुस्तक के Data chapter कहते हैं, "यह ठीक है अपनी फाइल निर्देशिका में सीधे छोटी फाइलें डालने के लिए "। मैंने अतीत में यही किया है। और ऐसा लगता है कि आप पहले से ही कर रहे हैं, साथ ही testdata निर्देशिका।

4

बेन Bolker की टिप्पणी से भारोत्तोलन:

मैं Inst/testdata और फिर system.file("testdata",...,package="my_package")

इस विधि का लाभ का उपयोग करें:

  • आप अपनी फ़ाइल संरचना स्वच्छ रख सकते , विशेष रूप से यदि आपके पास कई डेटा फ़ाइलें और/या परीक्षण हैं।
  • तथ्य यह है कि inst में फ़ाइलें स्थापित हैं लंबे समय से कैननिकल आर अभ्यास; ऐसा लगता है कि system.file("testdata", "some_file") हमेशा ../testdata/some_file से काम करेगा। R CMD check करते समय मुझे सापेक्ष फ़ाइल पथ का उपयोग करके खराब अनुभव हुए हैं।
  • साथिश के उत्तर के विपरीत, यह आपके डेटा को "संग्रहीत" आर कोड के रूप में निर्भर नहीं करता है।
संबंधित मुद्दे