0

在我们当前的应用程序中,我们正在尝试使用 WCF netMSMQBinding,它需要将 Operation Contract 标记为 One Way。

我们也在尝试使用 Fitnesse 作为我们的测试引擎,在我们的测试用例中,我们需要对场景进行端到端的测试,这意味着我们不能使用 One Way Operations,因为它们会在消息放入后立即返回queue 和 Fitnesse 将尝试断言结果,但实际消息可能尚未处理,也可能尚未处理。因此,如果我们使用单向操作,那么我们需要以某种方式等待它的执行完成。

方法尝试/研究..

  1. 通过读取配置在托管时更改 OperationDescription,以便在 Fitnesse IsOneWay 中托管时为 False,但在生产中 IsOneWay 为 True,然后用户 MSMQ 绑定仅在生产和测试中使用 tcp 或 netnamedpipe。

    我们尝试在打开服务之前创建自定义 ServiceHost 并更改 OperationDescription,但在 OperationDescription 类中 IsOneWay 是只读属性,通过查看 .Net Framework 代码,它返回消息计数。在我看来,我必须重写 Service Host 的 CreateDescription 操作并且必须提供自定义实现。它似乎

  2. 在 Fitnesse 中创建一个 Monitor Fixture,它会以某种方式等待消息被处理。

    方法 1:创建存储 MessageId 和已完成状态的自定义数据库表,并在每个消息处理结束时输入该表中的记录。所以现在fitnesse fixture可以轮询表并等待执行完成。

    方法 2:以某种方式轮询 MSMQ 并知道何时处理消息。我们仍在重新研究如何使其发挥作用。

请就当前方法或任何新方法提出任何建议。

4

1 回答 1

0

我建议#2更好。使用#1,您不再测试系统,因为它将在生产中运行。我假设您想在处理完消息后测试某些业务状况。您能否调查此业务状况是否属实?我认为这是一种比 2.1 或 2.2 更好的方法,您可以在其中轮询技术条件。

于 2013-12-09T23:41:56.880 回答