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));
}
最後の 2 行は、SQL サーバーのテーブルにメッセージのコピーが存在するかどうかをチェックします。1 つのテーブルは成功したメッセージ用で、もう 1 つのテーブルはエラー用です。
ここでの問題は、メッセージを送信した直後に、エラー テーブルにメッセージが配置されていないことを確認することです。ただし、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));
}