2013-06-06 13 views
15

जब मेरे पास सी # कंसोल एप्लिकेशन है, तो ऐप्स सेटिंग्स पढ़ने में असमर्थ। इसके कार्य में से एक appconfig मान पढ़ रहा है और कुछ काम करता है।यूनिट परीक्षण

string host = ConfigurationManager.AppSettings["Host"] 

तो मैंने अपने कंसोल एप्लिकेशन के लिए NUNIT परीक्षण लिखा। यूनिट परीक्षण परियोजना कक्षा पुस्तकालय का उपयोग करके बनाई गई थी।

लेकिन मेरा यूनिट परीक्षण अब विफल हो गया है। क्योंकि यह मेरी ऐप सेटिंग्स नहीं पढ़ रहा है (कोई ऐप सेटिंग्स इंगित नहीं करता है)। इसका कारण क्या है।
जब मैं अपना कंसोल ऐप चलाता हूं, तो यह ऐप सेटिंग्स को सही तरीके से पढ़ रहा है।

उत्तर

29

आपके पास अपनी यूनिट परीक्षण परियोजना के लिए एक app.config बनाया जाना चाहिए। जब आप इकाई परीक्षण चला रहे हों तो आपके कंसोल एप्लिकेशन के app.config से परामर्श नहीं किया जाएगा।

+3

में इसका मतलब है कि मैं अपने परीक्षण परियोजना के लिए निम्न रूप में अच्छी तरह जोड़ना होगा। ' ' –

+0

हाँ आप सही हैं – aquaraga

+0

यह काम किया। उसे कभी नहीं पता था। मदद –

11

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

तो तुम तरह अपने विन्यास अंतरफलक हो सकता है:

public interface IConfiguration 
{ 
    public string Host { get; set; } 
} 

इस तरह एक पैरामीटर (आमतौर पर आपके निर्माता के लिए) के रूप में एक IConfiguration वर्ग को स्वीकार करेंगे परीक्षण करने के लिए अपने वर्ग: फिर

public class MyClass 
{ 
    IConfiguration _config; 
    public MyClass(IConfiguration config) 
    { 
     _config = config; 
    } 

    public void MyMethodToTest() 
    { 
    } 
} 

अपने परीक्षण बाहरी कॉन्फ़िगरेशन फ़ाइल के आधार पर कॉन्फ़िगरेशन में पास करने के लिए इंटरफ़ेस का उपयोग कर सकता है जो आपके यूनिट परीक्षण को संभावित रूप से बदल सकता है और प्रभावित कर सकता है:

[Test] 
public void Testing_MyMethodToTest() 
{ 
    // arrange 
    var config = new Configuration { Host = "My Test Host" }; 
    // act 
    new MyClass(config).MyMethodToTest(); 
    // Add assertion for unit test 
} 

और अपने वास्तविक क्रियान्वयन, आपके विन्यास वर्ग बनाने appSettings से मूल्य (रों) के साथ इसे लोड और पारित है कि आपके कार्यान्वयन

+0

के लिए धन्यवाद लेकिन परीक्षण परियोजना में ऐप सेटिंग्स से उनके कार्यान्वयन में अभी भी उनके कार्यान्वयन को लोड करने की आवश्यकता होगी। –

+0

एक उदाहरण लिखा है कि आप एक परीक्षा कैसे लिखेंगे जिसे ऐप सेटिंग्स की आवश्यकता नहीं होगी – boniestlawyer

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