F #

2012-07-02 15 views
5

में स्क्रिप्ट फ़ाइलों के लिए परीक्षण परीक्षण मेरे पास एक स्क्रिप्ट फ़ाइल, setup.fsx के साथ कुछ कार्यक्षमता है, मैं उनको परीक्षण करना चाहता हूं। xUnit और पसंद को असेंबली का हिस्सा बनने के लिए परीक्षण किए जाने वाले कार्यों की आवश्यकता होती है।F #

तो मैं setup.fsx से setup.fs एक्सटेंशन से अपनी स्क्रिप्ट का नाम बदलने के बारे में सोच रहा हूं, फिर इसे किसी अन्य स्क्रिप्ट फ़ाइल से लोड कर रहा हूं। लेकिन तब मेरी स्क्रिप्ट

#r "System.Xml" 
#r "System.Xml.Linq" 

पर निर्भर करता है जो मैं तो बुला लिपि में निर्दिष्ट करने के लिए होता है (जहां निर्भरता वास्तव में उठता से दूर)

वहाँ वैसे भी XUnit worflow में स्क्रिप्ट के आधार पर परीक्षण एकीकृत करने के लिए कर रहे हैं ? स्क्रिप्ट फ़ाइलों के लिए परीक्षण लिखने के लिए किस संगठन का सुझाव दिया गया है?

(हो सकता है हम स्क्रिप्ट में परीक्षण के लिए और विधानसभा में नहीं एक दृश्य स्टूडियो विस्तार की जरूरत है ..)

उत्तर

2

यहां तक ​​कि अगर तुम सिर्फ दृश्य स्टूडियो के लिए fsx स्क्रिप्ट जोड़ने, तो आप अभी भी एक साथ एक सामान्य परियोजना में setup.fsx संकलन कर सकते हैं साथ अन्य (संभवतः fs) फ़ाइलें, इसलिए आपको स्क्रिप्ट को विजुअल स्टूडियो में एक सामान्य स्क्रिप्ट फ़ाइल के रूप में रखने में सक्षम होना चाहिए और साथ ही, इसे किसी प्रोजेक्ट या कमांड लाइन टूल से संदर्भित करना चाहिए जो आपके परीक्षण बनाता है।

मैं निम्नलिखित test.fsx फ़ाइल के साथ कर रही कोशिश की:

module Demo 
#r "System.Xml.Linq.dll" 
open System.Xml.Linq 

let test() = 
    let d = XDocument(XElement(XName.Get("foo"))) 
    d.ToString() 

आप निश्चित रूप से शुरुआत में कुछ module Name घोषणा की जरूरत है (ताकि आप अन्य फ़ाइलों से कार्यों का उपयोग कर सकते हैं), लेकिन अन्यथा यह किसी भी fsx फ़ाइल हो सकता है । अन्य फ़ाइल है कि मैं का इस्तेमाल किया test.fs था:

module Main 
open Demo  
test() |> printfn "%A" 

यह सिर्फ परीक्षण के लिए है, लेकिन यहाँ आप अपनी इकाई परीक्षण लिख सकते हैं। आप निम्न आदेश के साथ फ़ाइलें संकलन हैं, तो आप मानक विधानसभा कि आप XUnit को दे सकते हैं मिलता है (ध्यान दें, संकलक test.fsx से #r टैग चुन सकते हैं, हम संदर्भ स्पष्ट रूप से लिखने के लिए नहीं है):

fsc.exe --target:library test.fsx test.fs 

मुझे लगता है कि यदि आप एक लाइब्रेरी प्रोजेक्ट जोड़ते हैं और फिर fsproj फ़ाइल में इस तरह से कुछ का उपयोग करके फ़ाइल को लिंक (जो आपकी समाधान संरचना में कहीं और फ़ाइल को इंगित कर सकते हैं) को मैन्युअल रूप से लिंक जोड़ सकते हैं:

<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx"> 
    <Link>File.fsx</Link> 
</Compile> 

ध्यान दें कि जब आपजोड़ते हैं "आइटम जोड़ें" का उपयोग करकेफ़ाइल, इसे "शामिल करें" के रूप में चिह्नित किया गया है लेकिन "संकलन" के रूप में नहीं, इसलिए इसे प्रोजेक्ट के हिस्से के रूप में संकलित नहीं किया जाता है। उपर्युक्त में इसे परियोजना में शामिल करना चाहिए और इसे कंपाइलर को संकलित असेंबली में शामिल करने के लिए भी बताना चाहिए।

चेतावनी: कि कहा, मैं यह सिर्फ संकलित dll मानक इकाई परीक्षण का उपयोग करके फ़ाइलें परीक्षण करने के लिए बेहतर हो सकता है लगता है। यदि आप fsx फ़ाइलों का परीक्षण करना चाहते हैं, तो मैं अंत में परीक्षणों के रूप में कुछ पंक्तियां जोड़ूंगा और उन्हें हाथ से चलाऊंगा (चयन करें, Alt + Enter)। कारण यह है कि fsx फ़ाइलों को अक्सर बदला जाना चाहिए और इसलिए बहुत ठोस परीक्षण होने से आपकी लचीलापन सीमित हो सकती है। दूसरी ओर, एक बार कोड अधिक ठोस हो जाता है, इसे dll फ़ाइल में स्थानांतरित करने के लिए समझ में आता है।

+2

यदि आप fsx में शीर्ष पर मॉड्यूल लिखते हैं, तो आप इसे fsi में निष्पादित नहीं कर सकते हैं। #if COMPILED मॉड्यूल डेमो #endif ठीक लगता है – nicolas

+0

क्या आप सुनिश्चित हैं कि आपके पास किसी fsx फ़ाइल में परिभाषित होने पर डेमो नेमस्पेस तक पहुंच है? मुझे एक त्रुटि मिलती है। fsx फ़ाइल प्रोजेक्ट सूची में ऊपर है .. fs को नाम बदलने पर त्रुटि गायब हो जाती है, fsx – nicolas

+0

पर वापस स्विचिंग दिखाई देती है @nicolas I केवल कमांड लाइन से हाथ से कंपाइलर चलाने की कोशिश की। मुझे लगता है कि यह केवल तभी काम करेगा यदि 'fsx' फ़ाइल को संकलन के रूप में चिह्नित किया गया है - कमांड लाइन कमांड क्या है जो विजुअल स्टूडियो "आउटपुट" विंडो में प्रिंट करता है? क्या आप 'fsx' फ़ाइल थर्म देख सकते हैं? –

0

मुझे लगता है कि सबसे आसान समाधान उस कोड को लेना होगा जिसे आप परीक्षण करना चाहते हैं और इसे *.fs फ़ाइल में अलग रखें। *.fsx स्क्रिप्ट में, आप *.fs फ़ाइल (#load से कोड लोड करने के लिए #load निर्देश का उपयोग कर सकते हैं #include सी/सी ++ में)।

यूनिट परीक्षण के लिए, आप एक साधारण एफ # लाइब्रेरी प्रोजेक्ट बना सकते हैं जिसमें *.fs फ़ाइल <Link> (जैसे टॉमस के उत्तर में) का उपयोग करके फ़ाइल को संकलित डीएलएल के खिलाफ चलाएं।

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