Каков наилучший способ автоматизации интеграционного тестирования MSMQ с помощью Visual Studio Test suite / NUnit? - PullRequest
4 голосов
/ 06 мая 2009

Я хотел бы создать серию автоматических модульных тестов для приложения MSMQ, которое я пишу. На мой взгляд, проблема заключается в том, как приспособить обработчики событий из метода test. То есть я отправляю сообщение из тестового метода, и мне нужно вернуть результат тому тестовому методу, что сообщение было получено и обработано. Я не имею ни малейшего понятия, как этого добиться, и любое направление будет с благодарностью.

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Ищете ли вы способ написания модульных тестов, когда тестируемая система считает, что получает события из очереди, но вы не хотите использовать реальную очередь во время тестов?

Выезд Носороги . Это позволяет вам создавать фиктивную версию интерфейса очереди, а затем вызывать из нее события во время теста. Некоторый псевдокод для проверки метода Requester.DoSomething () может выглядеть следующим образом:

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

Проверьте Rhino mocks wiki для всех деталей.

1 голос
/ 06 мая 2009

Как правило, модульное тестирование должно изолировать тестируемый метод. Я не знаком с MSMQ, но вы обычно создаете фиктивный объект и передаете его своему производственному методу. Затем вы можете почувствовать, что метод сделал с фиктивным объектом, чтобы проверить его правильное поведение и отправить ожидаемый ответ. Метод производства не будет знать разницу. Модульное тестирование - это больше, чтобы гарантировать, что ваши методы ведут себя так, как ожидалось, в изоляции.

Звук - это то, что вы ищете, это интеграционный тест. Вы все еще можете использовать для этого модульные среды тестирования, но я бы не стал включать их в автоматическую сборку. Я хотел бы перенести их на выделенную тестовую машину (ы). Модульные тесты обычно останавливают сборку, поскольку они указывают на класс или метод, который ведет себя не так, как ожидалось. Где, как показывают интеграционные тесты, и методы или классы не взаимодействуют друг с другом, как ожидалось.

...