2012-04-19 30 views
5

में वस्तु नकली अगर मैं कुछ इस तरह है:कैसे आप एक स्थिर विधि

static class ManifestGenerator 
{ 
    public static void GenerateManifestFile(){ 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(manifestFilePath) 
} 

अब आप कृपया मुझे बताओ कैसे मैं एक इकाई परीक्षण यह सुनिश्चित करेंगे कि उस विधि सही एक्सएमएल उत्पन्न करता है बना सकते हैं कर सकते हैं? विधि कॉल

उत्तर

6

XDocument पर नकल करने की कोशिश न करें, मैं XDocument (मैं Moq का उपयोग कर रहा हूं) का नकल कैसे कर सकता हूं। यह समस्या नहीं है - यह फ़ाइल सिस्टम तक पहुंच है जो परेशान है। आप एक Stream पास कर सकता है बजाय करने के लिए प्रकट लिखने के लिए:

public static void GenerateManifestFile(Stream output) { 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(output); 
} 

तो फिर तुम एक MemoryStream साथ कि परीक्षण कर सकते हैं, लेकिन वास्तविकता में प्रकट पथ के लिए एक FileStream का उपयोग करें। तुम भी इस विधि का आंतरिक ([InternalsVisibleTo] का उपयोग कर ताकि आप अभी भी परीक्षण से पहुंच सकते हैं) और की तर्ज पर एक सार्वजनिक parameterless अधिभार बना सकता है:

using (Stream output = File.OpenWrite(manifestFilePath)) 
{ 
    GenerateManifestFile(output); 
} 

तब आप उस कोड का परीक्षण नहीं है, लेकिन आप कर सकते हैं अपने सभी असली तर्क का परीक्षण करें।

+0

+1: इसे सार्वजनिक विधि में 'उपयोग' भाग में विभाजित करना + आंतरिक कार्यकर्ता वास्तव में अच्छी युक्ति है। –

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