Мы пишем автоматизированные системные тесты для приложения BizTalk, но при этом обнаруживаем проблему, когда мы можем выполнить проверку теста. Мы должны быть уверены, что BizTalk полностью обработала сообщение, или обработка сообщений закончилась до проверки.Как определить, что BizTalk завершил обработку сообщения
[Test]
public void ReceiveValidTaskMessageTestShouldBeLoggedInMessageLog()
{
// Exercise
MsmqHelpers.SendMessage(InboundQueueName, ValidMessage);
// Verify
Assert.That(() => GetMessageCount("ReceiveError"), Is.EqualTo(0).After(1000));
Assert.That(() => GetMessageCount("Receive"), Is.EqualTo(1).After(1000));
}
Последние две строки проверить наличие копии сообщения в виде таблицы в SQL Server, одна таблица для успешного сообщения, одна таблица ошибок.
Проблема заключается в том, что сразу после отправки сообщения мы проверяем, что в таблице ошибок не было помещено ни одного сообщения. Но если BizTalk еще не обработал сообщение, то это утверждение пройдет, даже если оно не получится.
Что нам нужно что-то вроде этого:
[Test]
public void ReceiveValidTaskMessageTestShouldBeLoggedInMessageLog()
{
// Exercise
MsmqHelpers.SendMessage(InboundQueueName, ValidMessage);
// Verify
Assert.That(() => PendingMessages, Is.EqualTo(0).After(1000));
Assert.That(() => GetMessageCount("ReceiveError"), Is.EqualTo(0));
Assert.That(() => GetMessageCount("Receive"), Is.EqualTo(1));
}