Monday, 15 August 2011

c# - Async method within constructor affecting unit tests -


एक यूनिट परीक्षण करें कि परीक्षण को नेविगेशन केवल अगर Jobs.Count & gt; 0 GetJobsAsync () को निर्माण के दौरान कहा जाता है और नौकरी की सूची को साफ नहीं करता है, यदि नल नहीं है (हर बार इसे बुलाया जाता है तो ताजा सूची प्राप्त होती है)। ऐसा प्रतीत होता है कि मैन्युअल रूप से इकाई परीक्षण के लिए एक शर्त के रूप में नई नौकरी जोड़ने के बाद पारित करने के बाद नौकरियां सूची साफ़ हो जाती है। मैं इस समय को सही कैसे प्राप्त करूं ताकि परीक्षा की दौड़ में नौकरियों की सूची साफ़ न हो?

MyClass कंस्ट्रक्टर में :

  this.GetJobsAsync ();  

GetJobsAsync :

  निजी async शून्य GetJobsAsync () {var jobs = इस डेटा का इंतजार करें। DataService.GetJobs (); अगर (कार्य! = नल) {this.Jobs.Clear (); विदेशी (नौकरियों में नौकरी) (यह जॉब.एड (नया जॉबव्यू मॉडेल (नौकरी)); }} // में अपनी हालत को फिर से शुरू करने के लिए नौकरी का चयन करने का विकल्प है। SelectionJobCommand.RaiseCanExecuteChanged (); }  

यूनिट टेस्ट (नेविगेशन के लिए कम से कम एक नौकरी होनी चाहिए, जॉब को नौकरी के बाद जोड़ा जाता है):

  Var vm = नया MyClass (); Vm.Jobs.Add (नया JobVM (नया जॉब मॉडेल ())); vm.SelectJobCommand.Execute (शून्य); निश्चय करो।  

ऐसा प्रतीत होता है कि मैन्युअल रूप से एक नया जोड़ने के बाद जॉब्स सूची साफ़ हो जाती है यूनिट परीक्षा पास करने के लिए एक शर्त के रूप में कार्य।

यह स्पष्ट है कि आप समझते हैं कि आपके पास दौड़ की स्थिति है आप async शून्य पर प्रतीक्षा नहीं कर सकते, और आप एक कन्स्ट्रक्टर के अंदर हैं।

मैं यह समय सही कैसे प्राप्त करूं ताकि नौकरियां सूची साफ़ न हो परीक्षा चलाने के दौरान?

दो बातें पहले async शून्य के बजाय GetJobAsync को async टास्क में बदलें। उसके बाद, async प्रारंभिक पैटर्न का उपयोग करें:

  सार्वजनिक वर्ग MyClass {सार्वजनिक कार्य प्रारंभिक एसिंक ()} GetJobsAsync () लौटें; }}  

और अपने यूनिट परीक्षण में:

  सार्वजनिक async टास्क टेस्ट नवाचनएसिंक () {var vm = नया MyClass (); Vm.InitializeAsync () का इंतजार; Vm.Jobs.Add (नया JobVM (नया जॉब मॉडेल ())); vm.SelectJobCommand.Execute (शून्य); आश्वस्त करें। एरेक्वॉल (नेविगेशनकीज़। जादूजब, नेविगेशन सेवा। वर्तमान पृष्ठ); }  

यह निष्पादन के आदेश को आश्वस्त करेगा।


No comments:

Post a Comment