Estoy sumergiendo los pies en la forma de probar cosas de subprocesos múltiples, pero no estoy muy seguro de cómo empezar. Estoy seguro de que voy a averiguar más cosas fuera más fácil si tan sólo pudiera conseguir cosas en marcha, así que me preguntaba si alguien podría ayudarme a escribir un caso de prueba NUnit para esta clase simple:C#: Cómo probar una clase de trabajador con subprocesos básicos
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);
}
}
Lo que me gustaría la prueba es simple: se produce el evento Done
cuando termina. No tendría problemas si fuera sincrónico, pero no estoy seguro de por dónde empezar cuando no lo es. No si fue multi-hilo Una prueba simple (y el método Work
no era privado) podría ser:
[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);
}
}
Cualquier punteros?
eventRaisedFlag se puede omitir. Es más simple usar evento como una bandera. Assert.That (mre.WaitOne (1000)); –
Oooh, ahora eso es inteligente ... ¡genial! @Vadmyst: ¿cómo funcionaría si dijera que el evento logró finalizar antes de llamar a WaitOne? – Svish
Oh, supongo que es por eso que usaría un evento manualResetEvent en lugar de un evento AutoResetEvent? – Svish