2010-12-21 13 views
8

मैं MATLAB xUnit उपयोग कर रहा हूँ कुछ कोड का परीक्षण करने के लिए। मैं private निर्देशिका में निहित कुछ फ़ंक्शंस को सीधे कॉल करने में सक्षम होना चाहता हूं।एक निजी निर्देशिका में कार्यों का परीक्षण कैसे करें?

यहां एक साधारण प्रतिकृति सेटअप है: अपने आप को दो फ़ोल्डर्स code और test के साथ एक प्रोजेक्ट निर्देशिका बनाएं। code में, नाम वाली उप private ताकि आप निर्देशिका वृक्ष की तरह

project_root 
    code 
    private 
    test 

एक समारोह

function y = main() 
y = sub(); 
end 

एक समारोह

function y = sub() 
y = 123; 
end 

में लग रहा है private dir जगह में code निर्देशिका स्थान में बनाने test dir जगह एक समारोह

function testsub() 
assertElementsAlmostEqual(sub(), 123); 
end 

अब परीक्षण डीआईआर पर नेविगेट करें और runtests पर कॉल करें। आपको यह कहते हुए एक त्रुटि दिखाई देनी चाहिए कि sub अपरिभाषित है।

private निर्देशिका matlab रास्ते पर अनुमति नहीं है, इसलिए है कि एक विकल्प नहीं है। मैं संभवतः code डीआईआर में एक फ़ंक्शन डाल सकता हूं जो सभी निजी कार्यों के लिए हैंडल पुनर्प्राप्त करता है लेकिन यह हैकी लगता है।

सबसे अच्छा तरीका है निजी कार्यों के परीक्षण करने के लिए पहुँच प्राप्त करने के क्या है?

संपादित करें:

निजी निर्देशिका के लिए नेविगेट करने के विचार एक समस्या है। सिद्धांत रूप में मैं, उदाहरण के लिए कह सकते हैं,

cd(privateDirectory); 
suite = TestSuite.fromName(testDirectory); 
suite.run 

दुर्भाग्य से परीक्षण ढांचे जैसे ही आप run फोन निर्देशिका परीक्षण युक्त करने के लिए खुलता है।

उत्तर

7

एक समाधानtestsub भीतर से निजी निर्देशिका नेविगेट करने के लिए है, निजी समारोह आप STR2FUNC का उपयोग कर चाहते करने के लिए एक function handle मिलता तो वापस नेविगेट परीक्षण का उपयोग कर कि समारोह संभाल करने के लिए। तुम भी, अपने इकाई परीक्षण के लिए एक अलग सहायक समारोह में इन चरणों डाल सकता है ताकि तरह:

function privateFcn = get_private_fcn(privateDir,fcnName) 
    oldDir = cd(privateDir);   %# Change to the private directory 
    privateFcn = str2func(fcnName); %# Get a function handle 
    cd(oldDir);      %# Change back to the original directory 
end 

और तुम इस प्रकार testsub में इस समारोह का प्रयोग करेंगे:

function testsub() 
    privateDir = '...\project_root\code\private'; %# The path to the private 
                %# directory 
    privateFcn = get_private_fcn(privateDir,'sub'); %# Call get_private_fcn 
    assertElementsAlmostEqual(privateFcn(), 123); %# Apply your test 
end 

यह काम करता है, हालांकि MATLAB संपादक मुझे M-Lint फ़ंक्शन CD का उपयोग करने के लिए चेतावनी देता है: "सीडी फ़ंक्शन का एमसीसी उपयोग समस्याग्रस्त है।" मुझे लगता है कि इस चेतावनी को अनदेखा करना आपके लिए सुरक्षित है 1) फ़ंक्शन get_private_fcn वर्तमान निर्देशिका को बदलता है, फिर फ़ंक्शन हैंडल प्राप्त करने के बाद तुरंत इसे वापस बदलता है और 2) आप dealing with a deployed application नहीं हैं।

+0

अच्छी तरह से किया। धन्यवाद। –

1

निजी निर्देशिका की बात केवल code में कार्य करने के लिए काम करता है बहुत ही सीमित दृश्यता है, अर्थात है। इस प्रकार, उन्हें दृश्यमान बनाने के लिए कोई आधिकारिक तरीका नहीं है (कम से कम मुझे पता है)।

समारोह है कि जो कुछ भी code/private में है करने के लिए हैंडल को पुनः प्राप्त होगा मेरे लिए इसके बारे में जाने के लिए रास्ता साफ लगता है।

विकल्प code के अंदर रखना होगा। इसका लाभ यह है कि टेस्ट फ़ंक्शंस हमेशा उस कोड के साथ मिलते हैं, जिसे वे परीक्षण करना चाहते हैं, लेकिन आप यह "कोड" को अपनी कोड निर्देशिका महसूस कर सकते हैं।

+0

हाँ, मैं "वास्तविक" कोड से अलग परीक्षण कोड रखना पसंद करता हूं। –

3

जबकि आप अपने खोज पथ पर एक निजी निर्देशिका नहीं डाल सकते हैं, तो आप निजी निर्देशिका में सीडी कर सकते हैं।

एक बार वहां, MATLAB फ़ंक्शन देखेगा, और यह उनका उपयोग कर सकता है। इस तरह मैं निजी कार्यों पर खुद को परीक्षण करता हूं।

+0

प्रेरित हो गया, लेकिन आखिरकार इस मामले में विफल हो गया। मेरा संपादन देखें। –

+0

ड्रैट। फिर से फूला :) –

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