Automated tests 如何确定BizTalk已完成对消息的处理
我们正在为BizTalk应用程序编写自动化系统测试,但在确定何时可以执行测试验证时遇到问题。在验证之前,我们需要确保BizTalk已完全处理该消息,或者消息处理已超时Automated tests 如何确定BizTalk已完成对消息的处理,automated-tests,biztalk,Automated Tests,Biztalk,我们正在为BizTalk应用程序编写自动化系统测试,但在确定何时可以执行测试验证时遇到问题。在验证之前,我们需要确保BizTalk已完全处理该消息,或者消息处理已超时 [Test] public void ReceiveValidTaskMessageTestShouldBeLoggedInMessageLog() { // Exercise MsmqHelpers.SendMessage(InboundQueueName, ValidMessage);
[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));
}
自动化集成测试的问题就在这里 这种测试是基于证据的,这反映在测试的断言中;您正在寻找通过检查数据库进行处理的证据 类似地,为了知道处理已经完成,您正在寻找一些证据证明已经发生了这种情况。例如,理论上,您可以对BizTalk消息框数据库运行查询以检查其中的状态 然而,BizTalk不适合这种探测,因为它的构建没有考虑到测试(它的弱点之一)。我当然不知道该怎么做 有两种方法值得考虑:
尽管这种方法有限,但自动化集成测试还是非常有价值的。更好的方法是,当记录出现在这些表中的任何一个表中,并根据情况通过/失败测试时,会得到通知。您可以使用基本的无限循环来连续轮询表,或者更优雅的解决方案是使用事件-有关更多详细信息,请参阅