मुझे यकीन नहीं है कि कहां से शुरू करना है, लेकिन मुझे आपको एक संक्षिप्त विचार दें कि मैं कहां हूं और मैं क्या हासिल करना चाहता हूं। मैं एमवीवीएम पर यूनिट परीक्षण के लिए काफी नया हूं और पीआरआईएसएम प्रतिनिधि कमांड गुणों का उपयोग करके मैंने जिन आदेशों का खुलासा किया है, उनका परीक्षण करने में कठिनाई है। मेरे प्रतिनिधि आदेश एसिंक विधि को कॉल करते हैं जिसे प्रतीक्षा करना है ताकि मैं वास्तविक परिणाम प्राप्त कर सकूं। नीचे एक एएसईसी विधि है जिसे विधि द्वारा बुलाया जाता है जिसे मैं परीक्षण करना चाहता था।एसिंक विधि के साथ एक व्यू मॉडेल का परीक्षण कैसे करें यूनिट।
async void GetTasksAsync()
{
this.SimpleTasks.Clear();
Func<IList<ISimpleTask>> taskAction =() =>
{
var result = this.dataService.GetTasks();
if (token.IsCancellationRequested)
return null;
return result;
};
IsBusyTreeView = true;
Task<IList<ISimpleTask>> getTasksTask = Task<IList<ISimpleTask>>.Factory.StartNew(taskAction, token);
var l = await getTasksTask; // waits for getTasksTask
if (l != null)
{
foreach (ISimpleTask t in l)
{
this.SimpleTasks.Add(t); // adds to ViewModel.SimpleTask
}
}
}
भी यहाँ है कि ऊपर
this.GetTasksCommand = new DelegateCommand(this.GetTasks);
void GetTasks()
{
GetTasksAsync();
}
और अब मेरा टेस्ट विधि
[TestMethod]
public void Command_Test_GetTasksCommand()
{
MyViewModel.GetTaskCommand.Execute(); // this should populate ViewModel.SimpleTask
Assert.IsTrue(MyBiewModel.SimpleTask != null)
}
की तरह हो जाता है वर्तमान में मैं क्या मिल रहा है वह यह है कि async प्रणाली को बुलाती है मेरी वी एम में आदेश है मेरी ViewModel.SimpleTask = null ऐसा इसलिए है क्योंकि यह async विधि को समाप्त करने की प्रतीक्षा नहीं करता है। मैं समझता हूं कि पहले से ही स्टैक ओवरफ़्लो में कुछ संबंधित विषय हैं लेकिन मुझे मेरे प्रतिनिधि कॉमांड से संबंधित कुछ नहीं मिला।
या इससे भी बेहतर, यह आपको 'async कार्य' इकाई परीक्षण का उपयोग करने और 'GetTasksAsync() 'का इंतजार करने की अनुमति देता है। –
उत्तर के लिए धन्यवाद। हालांकि यह GetTasksAsync() मेरे व्यूमोडेल के भीतर एक निजी विधि है और मेरी परियोजना के भीतर किसी अन्य ऑब्जेक्ट को बेनकाब नहीं करना चाहता है और केवल डेलीगेट्स द्वारा ही बुलाया जाता है। यह कहकर कि मैं केवल सार्वजनिक तरीकों का परीक्षण कर रहा हूं। इन प्रतिनिधियों को जनता के रूप में उजागर किया जाता है। एक और क्षेत्र का परिचय देना एक रास्ता हो सकता है लेकिन आप सही हैं कि यह गंदा होगा। मैं आपको देखे जाने वाले Awaitable प्रतिनिधि कॉमैंड लिंक को देखूंगा और देख सकता हूं कि यह उपयोगी होगा या नहीं। –
अद्यतन: मैंने आपके उपरोक्त उत्तर को इस तथ्य के लिए कार्यान्वित किया कि मैं अभी तक समाधान के लिए अन्य वैकल्पिक कसरत नहीं कर सका- उदा। प्रतीक्षा योग्य प्रतिनिधिमंडल। इसका कार्यान्वयन करने का मतलब है कि मैंने अपनी निजी विधियों को सार्वजनिक रूप से बदल दिया (यह बदबू आ रही है!), अब मेरी समस्या यह है कि जब GetTaskAsync() को t.Wait() का उपयोग करके बुलाया जाता है तो यह फेंक InnerException = {"इस प्रकार का संग्रह दृश्य इसके परिवर्तनों का समर्थन नहीं करता है डिस्पैचर थ्रेड से अलग धागे से स्रोत चयन। "}। ऐसा इसलिए क्योंकि यह अन्य धागे से मेरे संग्रह में वस्तुओं को जोड़ता है। कोई उपाय? –