2012-06-26 4 views
2

Мы пишем автоматизированные системные тесты для приложения 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)); 
} 

ответ

1

В этом и заключается проблема с автоматизированным тестированием интеграции.

Такое тестирование основано на фактах, что отражено в утверждениях вашего теста; вы ищете доказательства того, что обработка прошла путем проверки базы данных.

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

Однако BizTalk не подходит для такого рода исследований, поскольку он не был построен с учетом тестирования (одна из его слабостей). Я, конечно, не знаю, как это сделать.

Несколько подходов стоит учесть:

  1. Wait «разумный» количество времени, прежде чем выполнять проверку базы данных, чтобы позволить BizTalk для завершения обработки сообщения.
  2. Имейте BizTalk выведите файл журнала (или некоторые другие доказательства) непосредственно перед завершением обработки, которую вы можете проверить перед проверкой базы данных.

Несмотря на то, что подход ограничен, автоматическое тестирование интеграции невероятно ценно.

0

Лучшим подходом было бы уведомление, когда запись появляется в любой из этих таблиц и, если необходимо, проходит тест/сбой. Вы можете использовать рудиментарный бесконечный цикл для непрерывного опроса таблиц, или более элегантным решением было бы использовать события - см. event handler delegate для более подробной информации.

Смежные вопросы