2012-07-04 12 views
6

मैंने हाल ही में अपने निर्माण सिस्टम को automake/autoconf में परिवर्तित कर दिया है। मेरी परियोजना में मेरे पास कुछ यूनिट परीक्षण हैं जिन्हें कुछ इनपुट डेटा फ़ाइलों को सख्त में जहां से वे चलाए जाते हैं, की आवश्यकता होती है। जब मैं रनशेक करता हूं और यह वीपीएटीएच बिल्ड की कोशिश करता है, तो ये परीक्षण विफल हो जाते हैं क्योंकि वे स्पष्ट रूप से निर्देशिका से नहीं चलते हैं जहां इनपुट फाइलें होती हैं। मैं सोच रहा था कि इसके लिए कुछ त्वरित समाधान है या नहीं। उदाहरण के लिए, क्या मैं किसी भी तरह सिस्टम को बता सकता हूं कि इन परीक्षणों को डिस्टचेक बनाने के लिए नहीं चलाया जा सकता है (लेकिन फिर भी उन्हें चेक बनाने पर चलाएं)? या निर्देशिका में सीडी करने के लिए जहां फाइलें परीक्षण चलाने से पहले हैं?डिस्चेक और परीक्षण करें जिन्हें इनपुट फ़ाइलों की आवश्यकता है

उत्तर

4

सामान्य समाधान परीक्षण लिखना है ताकि वे डेटा फ़ाइलों के लिए स्रोत निर्देशिका में देखें। उदाहरण के लिए, आप परीक्षण में $srcdir का संदर्भ दे सकते हैं, या test से test.in पर परिवर्तित कर सकते हैं और @[email protected] देखें।

अपने परीक्षण स्रोत निर्देशिका में सभी कर रहे हैं, तो आप Makefile.am में TESTS_ENVIRONMENT निर्धारित करके कि निर्देशिका में सभी परीक्षणों चला सकते हैं:

TESTS_ENVIRONMENT = cd $(srcdir) && 

यह असफल हो जायेगी अपने परीक्षण के कुछ कॉन्फ़िगर द्वारा बनाई गई हैं, तो और इसलिए निर्माण निर्देशिका में ही रहते हैं, ऐसी स्थिति में आप कर सकते हैं चुनिंदा तरह कुछ के साथ सीडी:

TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } && 

TESTS_ENVIRONMENT उपयोग करने के लिए की तरह इस पर सबसे अच्छा नाजुक है की कोशिश कर रहा है, और यह सबसे अच्छा होगा परीक्षण लिखने के लिए चाहते हैं, ताकि वे स्रोत सख्त में देखो डेटा फ़ाइलों के लिए ctory।

+0

मेरे परीक्षण src/some/path में हैं और डेटा फाइलें एक ही निर्देशिका में हैं। मैंने TESTS_ENVIRONMENT = cd $ (srcdir) और चाल की कोशिश की है लेकिन यह काम नहीं कर रहा है क्योंकि अब यह परीक्षण निष्पादन योग्य नहीं है। मौजूदा डेटा फ़ाइलों को मौजूदा निर्देशिका में कॉपी करना भी काम नहीं करता है क्योंकि, वीपीएटीएच बिल्ड में, आपको स्पष्ट रूप से निर्देशिका में लिखने की अनुमति नहीं है जहां परीक्षण चल रहे हैं। –

+0

@ मार्टिन, आपके पास स्रोत निर्देशिका में लेखन पहुंच नहीं है, लेकिन आपके पास बिल्ड निर्देशिका में लेखन पहुंच है। आप फाइल की प्रतिलिपि कैसे बना रहे हैं? Test.in में Makefile.am और 'cp $ {srcdir}/datafile .' में बस 'EXTRA_DIST = datafile' जोड़ना चाहिए। हालांकि, यदि परीक्षण स्रोत निर्देशिका से चल रहा है तो कॉपी करने का प्रयास लिखने की अनुमति के कारण विफल हो जाएगा। मुझे संदेह है कि आपके पास कुछ परीक्षण हैं जो बिल्ड डीआईआर से चलते हैं और कुछ जो स्रोत डीआईआर से चलते हैं। ('* .in' नामक टेस्ट (शायद) बिल्ड डीआईआर से चलते हैं, जबकि अन्य परीक्षण स्रोत डीआईआर से चलाए जाते हैं।) –

+0

यह बिल्कुल वैसा ही दिखता था जो मैं ढूंढ रहा था, लेकिन यह ऑटोमैक के साथ काम नहीं कर रहा है 1.15, दुर्भाग्यवश: इसके साथ, यह स्रोत निर्देशिका में '* .log' और' * .trs' फ़ाइलों को बनाता है (जो पहले से ही खराब है), लेकिन फिर भी उन्हें बिल्ड निर्देशिका में ढूंढता है और, ज़ाहिर है, नहीं मिला वहां उन्हें (जो घातक है)। –

7

मुझे वही समस्या थी और विलियम के समान समाधान था।

EXTRA_DIST = testdata/test1.dat 

AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\" 

फिर, मेरी unittest में, मैं DATADIR का उपयोग को परिभाषित:

string path = DATADIR "/testdata/test1.dat" 

यह make check और make distcheck साथ काम करता है मेरे Makefile.am कुछ इस तरह लग रहा है।

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

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