2013-07-12 6 views
6

के साथ कमांड लाइन तर्क मैं सभी कोड सही तरीके से काम कर रहा है यह सुनिश्चित करने के लिए वीएस इकाई परीक्षण ढांचे का उपयोग करना चाहता हूं। हालांकि मुझे परीक्षणों में बहुत परेशानी हो रही है जिसके लिए काम करने के लिए कमांड लाइन तर्क की आवश्यकता होती है (चूंकि कमांड लाइन इनपुट रनटाइम पर दिया जाना चाहिए ... और यूनिट परीक्षणों के साथ कोई वास्तविक "रनटाइम" नहीं है)। क्या कमांड लाइन तर्क इनपुट के साथ मेरे यूनिट परीक्षण चलाने का कोई तरीका है? मुझे एहसास हुआ कि यह एक कार्यक्रम बनाने का आदर्श तरीका नहीं है, लेकिन दुर्भाग्यवश मैं यह तय नहीं करता कि परीक्षण प्रक्रिया कैसे काम करती है।विजुअल स्टूडियो यूनिट परीक्षण सी #

मैंने पढ़ा है कि मैं संभावित रूप से बैच फ़ाइल लिख सकता हूं और इसे MStest/testcontainer फ़ोल्डर में शामिल कर सकता हूं। हालांकि इस तरह से ऐसा करने के लिए मुझे कुछ चोट लगनी पड़ेगी। ये hurtles में शामिल हैं:

1) मैं बैच फ़ाइलों के बारे में कुछ भी नहीं

2) मैं जहां MSTest/testcontainer फ़ोल्डर है, यह कैसे उपयोग करने के लिए पता नहीं है, यह कैसे काम करता पता है, या यहाँ तक कि कैसे फ़ाइलें जोड़ने के लिए इसके लिए (क्योंकि यह छुपा हुआ है या आसानी से सुलभ नहीं है)।

3) मुझे नहीं पता कि मैं बैच फ़ाइल के साथ क्या करूंगा, भले ही यह सही ढंग से लिखा गया हो और MStest/testcontainer फ़ोल्डर में। मेरे परीक्षणों को यह भी पता होना चाहिए कि यह वहां है, अकेले ही इसमें इनपुट करें?

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

धन्यवाद एक टन।

उत्तर

0

आप Process class के साथ परीक्षण विधि के भीतर अपने प्रोग्राम का एक नया उदाहरण शुरू कर सकते हैं। कुछ की तरह:

Process prop = new Process(); 
prop.StartInfo.FileName = "myProgram.exe"; 
prop.StartInfo.Arguments = "-arg1 -arg2"; 
prop.StartInfo.RedirectStandardOutput = true; 
prop.StartInfo.RedirectStandardInput = true; 
prop.Start(); 
// You can then use prop.StandardInput and prop.StandardOutput for testing. 
prop.WaitForExit(); 
int code = prop.ExitCode; 
+0

यह पूरे बैच फ़ाइल बकवास से कहीं अधिक आसान लग रहा है! किस नामस्थान के तहत प्रक्रिया है? मैं अपने परीक्षणों में प्रोप का उपयोग करने के बारे में कैसे जाउंगा? उदाहरण के लिए arg1 वह इनपुट है जिसे मुझे एक्सेस करने की आवश्यकता है, क्या मैं बस कहूंगा: "prop.StandardInput.arg1" मेरे परीक्षण कार्यों में उपयोग के लिए arg1 तक पहुंचने के लिए? –

+0

prop.StandardInput और prop.StandardOutput केवल स्ट्रीम हैं कि आप पाठ भेज और पढ़ सकते हैं। यह मूल रूप से कार्यक्रम के लिए एक ब्लैकबॉक्स परीक्षण होगा। यह विशिष्ट तरीकों/चरों तक पहुंच नहीं देगा। यह केवल उस निश्चित परीक्षण का परीक्षण करेगा जो सही इनपुट प्राप्त करता है, सही आउटपुट प्राप्त होता है। – Cemafor

+0

सबकुछ आसानी से चल रहा है, आपकी मदद के लिए धन्यवाद। बहुत बहुत धन्यवाद। –

2

लघु, आपकी समस्या का समाधान होगा, और गलत दृष्टिकोण इकाई परीक्षण :-) के लिए: अपने कार्यक्रम आदेश पंक्ति तर्क की आवश्यकता है

है, तो यह static void Main(string[] args) विधि होनी चाहिए।

बस इस विधि को कॉल करने के लिए अपने यूनिट परीक्षण लिखें जो आप सामान्य रूप से जो भी कमांड लाइन तर्क जोड़ते हैं।

लंबा, बेहतर तरीका: 2 में एक कार्यक्षमता को विभाजित करें - एक वर्ग जो काम करता है, और केवल एक साधारण प्रोग्राम है, जो कमांड लाइन तर्क प्राप्त करता है और उन्हें कार्यकर्ता को पास करता है।

लिखना 2 यूनिट परीक्षण - एक, मुख्य (xxx) वास्तव में आपकी कक्षा में तर्कों को पारित करता है, और आपके वास्तविक कार्यकर्ता के लिए कई तर्क परीक्षण इन तर्कों के आधार पर अपने व्यवहार को सत्यापित करने के लिए करते हैं।

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