¿Cuál es la mejor manera de automatizar las pruebas de integración MSMQ con Visual Studio Test suite / NUnit?

StackOverflow https://stackoverflow.com/questions/831247

Pregunta

Me gustaría crear una serie de pruebas unitarias automatizadas para una aplicación MSMQ que estoy escribiendo. Según lo veo, el desafío es cómo acomodar los controladores de eventos desde el método de prueba. Es decir, envío un mensaje desde el método de prueba y necesito devolver un resultado a ese método de prueba de que el mensaje ha sido recibido y manejado. No tengo idea de cómo lograr esto y cualquier dirección sería muy apreciada.

¿Fue útil?

Solución

¿Está buscando una forma de escribir pruebas unitarias donde el sistema bajo prueba cree que está recibiendo eventos de una cola, pero no desea utilizar una cola real durante las pruebas?

Consulte Rhino Mocks . Le permite crear una versión simulada de su interfaz de cola y luego generar eventos durante la prueba. Algunos pseudocódigos para probar el método Requester.DoSomething () podrían verse así:

// SETUP
MockRepository mocks = new MockRepository();
IQueue mockQueue = mocks.StrictMock<IQueue>();

queue.Received+=null;//create an expectation that someone will subscribe to this event
LastCall.IgnoreArguments();// we don't care who is subscribing
IEventRaiser raiseReceivedEvent = LastCall.GetEventRaiser();//get event raiser for the last event, in this case, Received
Expect.Call(mockQueue.Send).Return(msgId);
mocks.ReplayAll();

// EXEC
Requester req = new Requester(mockQueue);

// We expect this method to send a request to the mock queue object.
req.DoSomething();
// Now we raise an event from the mock queue object.
raiseReceivedEvent.Raise(eventArgs);

// VERIFY
// we would probably also check some state in the Requester object
mocks.VerifyAll();

Consulte Rhino se burla de la wiki para obtener todos los detalles.

Otros consejos

Normalmente, una prueba unitaria debe aislar el método que se está probando. No estoy familiarizado con MSMQ, pero normalmente crearía un objeto simulado y lo pasaría a su método de producción. Entonces puede sentir lo que el método le hizo al objeto simulado para verificar que se comporta correctamente y enviar la respuesta esperada. El método de producción no sabrá la diferencia. Las pruebas unitarias son más para garantizar que sus métodos se comporten como se espera de forma aislada.

El sonido es lo que buscas es una prueba de integración. Todavía puede usar marcos de prueba de unidad para lograr esto, pero no los incluiría en una compilación automatizada. Los trasladaría a máquinas de prueba dedicadas. Las pruebas unitarias generalmente detienen una compilación ya que indican una clase o método que no se comporta como se esperaba. Donde como indican las pruebas de integración y los métodos o clases no interactúan entre sí como se esperaba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top