Qual é a melhor maneira de automatizar a integração testar MSMQ com o Visual suíte Studio Test / NUnit?

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

Pergunta

Eu gostaria de criar uma série de testes de unidade automatizados para uma aplicação MSMQ estou escrevendo. A meu ver, o desafio é como acomodar os manipuladores de eventos a partir do método de teste. Ou seja, eu enviar uma mensagem a partir do método de ensaio e necessidade de voltar a trás resultado com o método de teste que a mensagem foi recebida e tratada. Eu não tenho idéia de como fazer isso e qualquer direção seria muito apreciada.

Foi útil?

Solução

Você está procurando uma maneira de testes de unidade de gravação onde o sistema em teste pensa que está recebendo eventos de uma fila, mas você não quiser usar uma fila real durante os testes?

Confira Rhino Mocks . Ele permite que você crie uma versão falsa da sua interface de fila e, em seguida, levantar os eventos de que durante o teste. Alguns pseudo-código para testar o método Requester.DoSomething () pode ter esta aparência:

// 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();

Confira os Rhino Mocks wiki para todos os detalhes.

Outras dicas

Normalmente, um teste de unidade deve isolar o método a ser testado. Eu não estou familiarizado com MSMQ mas você normalmente criar um objeto de simulação e passar isso para o seu método de produção. Depois, você pode sentir o que o método fez com o objeto de simulação para verificar a sua comportar corretamente e enviar a resposta esperada. O método de produção não vai saber a diferença. O teste de unidade é mais para garantir que seus métodos estão se comportando como esperado em isolamento.

Som é como o que procura é um teste de integração. Você ainda pode usar estruturas de teste de unidade para alcançar este objetivo, mas eu não incluí-los em uma compilação automatizada. Eu movê-los para uma máquina de teste dedicado (s). Os testes de unidade geralmente deter uma compilação em que indicam uma classe ou método que não está se comportando como esperado. Onde como testes de integração indicar e métodos ou classes não estão interagindo uns com os outros como esperado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top