का परीक्षण कैसे करें मैं बहु-थ्रेडेड सामानों का परीक्षण करने के तरीके में अपने पैर की उंगलियों को डुबो रहा हूं, लेकिन यह सुनिश्चित नहीं है कि कैसे शुरू किया जाए। मुझे यकीन है कि मैं और अधिक सामान बाहर निकालने होगा आसान अगर मैं सिर्फ सामान जा रहा हो सकता है हूँ, इसलिए अगर कोई मदद कर सकता है मुझे इस साधारण क्लास के लिए एक NUnit परीक्षण का मामला बारे में मैं सोच रहा था:सी #: मूल थ्रेडेड वर्कर क्लास
class Worker
{
public event EventHandler<EventArgs> Done = (s, e) => { };
public void StartWork()
{
var thread = new Thread(Work) { Name = "Worker Thread" };
thread.Start();
}
private void Work()
{
// Do some heavy lifting
Thread.Sleep(500);
Done(this, EventArgs.Empty);
}
}
मैं चाहते हैं क्या परीक्षण बस है: Done
ईवेंट समाप्त होने पर उठाया गया है। अगर यह तुल्यकालिक था, तो मुझे कोई समस्या नहीं होगी, लेकिन यह सुनिश्चित नहीं है कि यह कहां से शुरू हो सकता है। एक साधारण परीक्षण मल्टी-थ्रेडेड अगर यह नहीं था (और Work
विधि निजी नहीं था) हो सकता है:
[TestFixture]
class WorkerTests
{
[Test]
public void DoWork_WhenDone_EventIsRaised()
{
var worker = new Worker();
var eventWasRaised = false;
worker.Done += (s, e) => eventWasRaised = true;
worker.Work();
Assert.That(eventWasRaised);
}
}
किसी भी संकेत दिए गए?
eventRaisedFlag छोड़ा जा सकता है। ध्वज के रूप में घटना का उपयोग करना आसान है। Assert.That (mre.WaitOne (1000)); –
ओह, अब यह चालाक है ... शानदार! @ वाडमीस्ट: अगर वेटऑन को कॉल करने से पहले ईवेंट समाप्त हो जाए तो यह कैसे काम करेगा? – Svish
ओह, मुझे लगता है कि आप AutoResetEvent के बजाय मैन्युअल रीसेट इवेंट का उपयोग क्यों करेंगे? – Svish