我们正在为 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));
}