2010-03-09 19 views
27

साथ समस्या यह है जब मैं कनेक्शन पर एक साधारण परीक्षण चलाने डीबी जाँच मैं NUnit में कोई त्रुटि प्राप्त:NUnit और app.config

[Test] 
public void TestConn() 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString; 
    SqlConnection connection = new SqlConnection(connectionString); 
    connection.Open(); 
    Assert.AreEqual(ConnectionState.Open, connection.State); 
    connection.Close(); 
} 

System.NullReferenceException: ऑब्जेक्ट संदर्भ का एक उदाहरण के लिए सेट नहीं एक वस्तु।

connectionString = ConfigurationManager.ConnectionStrings["FertigungRead"].ConnectionString; 

मैं टेस्ट मैचों में ConfigurationManager उपयोग कर सकते हैं:

लाइन पर

?

+1

आप कभी भी इस का समाधान कर लिया prebuilds में यह कॉन्फ़िगर कर सकते हैं? – Michel

+1

एक ही समस्या में चल रहा है। समस्या यह है कि, जब आप परीक्षण चलाने के लिए nunit.exe का उपयोग करते हैं (यह नहीं पता कि आप इसका उपयोग भी करते हैं), तो यह nunit के app.config का उपयोग करता है।ऑफकोर्स आप वहां कनेक्शनस्ट्रिंग डाल सकते हैं, लेकिन थोड़ा अजीब जगह होने के बावजूद, इस (मौजूदा) फ़ाइल में एक पंक्ति है जिसमें 'अपने स्वयं के एप्सेटिंग स्टोर करने के लिए इसका उपयोग न करें' (जिसे हम अनदेखा करने के लिए स्वतंत्र हैं, लेकिन यह ऐसा लगता है कि एक और संभावना होनी चाहिए) – Michel

+0

आमतौर पर, जब आप NUnit चलाते हैं, कॉन्फ़िगरेशन फ़ाइल का नाम क्या है, और आप अपने यूनिट परीक्षण कैसे चलाते हैं, उदाहरण के लिए, "कॉन्फ़िगरेशन फ़ाइल" वर्तमान निर्देशिका "के संबंध में यह कहां है, एनएनआईटी में सीधे .dll खोलें, या एक प्रोजेक्ट खोलें?)। क्या आप इन 3 चीजों को स्पष्ट कर सकते हैं? – apollodude217

उत्तर

23

हाँ, आप कर सकते हैं। आपको यह सुनिश्चित करने की ज़रूरत है कि आपके परीक्षण में संदर्भित किसी भी कॉन्फ़िगरेशन वास्तव में परीक्षण प्रोजेक्ट के app.config में मौजूद है।

दूसरे शब्दों में, जिस परियोजना में आपका परीक्षण है, उसके पास app.config में परिभाषित कनेक्शन स्ट्रिंग "FertigungRead" नहीं है।

ऐसा करने का एक तरीका है परीक्षण परियोजना as a link के परीक्षण के तहत सिस्टम के app.config को जोड़ने के लिए, इस तरह दोनों परियोजनाओं पर कोई भी परिवर्तन होता है।

3

आपके यूनिट परीक्षण तब तक काम कर सकते हैं जब तक आपके मुख्य प्रोजेक्ट के लिए आपके परीक्षण प्रोजेक्ट के लिए समान कॉन्फ़िगरेशन न हो।

मैं आपके परीक्षण प्रोजेक्ट में प्री-बिल्ड इवेंट का उपयोग करने का सुझाव दूंगा ताकि आपके एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल को टेस्ट प्रोजेक्ट पर कॉपी किया जा सके। यह विन्यास के दो सेट बनाए रखने के लिए बचाता है।

प्रति $ (SolutionDir) पथ करने वाली मुख्य परियोजना \ Web.config $ (ProjectDir) App.config

1

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

सामान्य रूप से, यदि आपको यूनिट परीक्षणों के लिए कुछ कॉन्फ़िगरेशन डेटा की आवश्यकता है, तो परीक्षण प्रोजेक्ट में एक app.config फ़ाइल बनाएं। अपने परीक्षण वातावरण के लिए उपयुक्त मूल्यों के साथ ऐप सेटिंग्स और कनेक्शनस्ट्रिंग तत्व आदि को पॉप्युलेट करें। जांच करें कि कॉन्फ़िगरेशन मैनेजर या एसक्यूएलकनेक्शन काम करता है या नहीं। आप केवल उस कोड को बनायेंगे जो आपको बनाए रखना है, लेकिन यह वास्तव में आपके द्वारा लिखे गए किसी भी उत्पादन कोड को सत्यापित नहीं करता है।

+3

यूनिट परीक्षण हैं, और फिर एकीकरण परीक्षण है। आपको परीक्षण करना होगा कि आपका एसक्यूएल (दृढ़ता परत) कोड किसी बिंदु पर काम करता है! इसके अलावा आप कम से कम कुछ अंत तक परीक्षण करना चाहते हैं। – csauve

+0

उल्लेख नहीं है कि एननिट का उपयोग सेलेनियम यूआई परीक्षणों जैसी चीजों को चलाने के लिए भी किया जाता है। हां, यह मुख्य रूप से एक यूनिट टेस्ट फ्रेमवर्क है, लेकिन इसका उपयोग इसके लिए नहीं किया जाता है। – BardMorgan

+0

@csauve बिंदु यह है कि वह केवल जांच कर रहा है कि कनेक्शन स्ट्रिंग काम करता है ... और कुछ नहीं। –

1

मेरा उत्तर देखें nunit and configs आपको कॉन्फ़िगर फ़ाइल का नाम क्या है, यह जानने की आवश्यकता है। उसे पता चलता है कि मैं इस परियोजना को जड़ में एक MyProjectTests.dll.config रख दिया और सब कुछ काम करता है http://nunit.net/blogs/?p=9

: यह यह seams

1

आदमी पर एक नज़र दे डिफ़ॉल्ट रूप से namespace.config के लिए लग रहा है।

मेरी कॉन्फ़िग फ़ाइल का एक उदाहरण है:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="TestKey" value="Ok!"/> 
</appSettings> 
</configuration> 

और मैं सरल उपयोग कर रहा हूँ: ConfigurationManager.AppSettings["TestKey"];

4

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

प्रलेखन कहते हैं:

एक भी विधानसभा लोड किया जा रहा है, तो विन्यास फाइल config विस्तार के साथ विधानसभा फ़ाइल का नाम दिया जाता है। उदाहरण के लिए, nunit.tests.dll को चलाने के लिए प्रयुक्त कॉन्फ़िगरेशन फ़ाइल को nunit.tests.dll.config नाम दिया जाना चाहिए और dll के समान निर्देशिका में स्थित होना चाहिए।

यदि कोई एनयूनीट प्रोजेक्ट लोड किया जा रहा है, तो कॉन्फ़िगरेशन फ़ाइल प्रोजेक्ट फ़ाइल के नाम का उपयोग एक्सटेंशन के साथ कॉन्फ़िगर में बदल जाती है। उदाहरण के लिए, प्रोजेक्ट AllTests.nunit को AllTests.nunit के समान निर्देशिका में स्थित AllTests.config नामक कॉन्फ़िगरेशन फ़ाइल की आवश्यकता होगी। विजुअल स्टूडियो परियोजनाओं या समाधानों को लोड करते समय एक ही नियम का पालन किया जाता है।

http://www.nunit.org/index.php?p=configFiles&r=2.2.10

5
  1. जाओ NUnit/परियोजना/संपादित करने के लिए ...
  2. विन्यास संपत्ति पैनल में विन्यास के लिए जाना फ़ाइल नाम
  3. वहाँ रखो yourAssemblyName .dll.config

एनबी: यदि काम नहीं करता है तो पथ जोड़ने का प्रयास करें, उदाहरण के लिए बिन \ डीबग \ yourAssemblyName .dll.config

आपका परीक्षण परियोजना फ़ाइल yourAssemblyName .nunit अद्यतन किया जाएगा।

और हाँ, क्या आप परीक्षा में पहुंचने के लिए अपने परीक्षण परियोजना मैच में यकीन App.config हो, यानी

[Test] 
public void TestConn() 
{ 
    var sss = ConfigurationManager.AppSettings["TestKey"]; 
} 

App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="TestKey" value="testKeyValue"/> 
    </appSettings> 
</configuration> 
+0

धन्यवाद, यह मेरे लिए काम किया। मैंने App.config का उपयोग किया। –

0

जब एक विन्यास फाइल में प्रयोग किया जाता है जिस परियोजना में एक परीक्षण चलाया जाता है, विशिष्ट नामकरण सम्मेलनों का पालन किया जाना चाहिए।

कॉन्फ़िगरेशन फ़ाइल नाम कॉन्फ़िगरेशन एक्सटेंशन के साथ असेंबली फ़ाइल का नाम होना चाहिए। उदाहरण के लिए, विन्यास MyUnitTest.tests.dll को चलाने के लिए इस्तेमाल किया फ़ाइल MyUnitTest.tests.dll.config नामित किया जाना चाहिए और यह MyUnitTest.nunit

रूप में एक ही निर्देशिका में होना चाहिए इसके अलावा हम जैसे नीचे

copy $(SolutionDir)path-to-main-project\Web.config $(ProjectDir)App.config