首页 > 解决方案 > Cucumber 断言部分匹配消息的设计模式

问题描述

我正在尝试为应用程序编写组件测试框架。这个应用程序可以通过 JMS/Websockets 发送消息(传输并不重要)。我正在使用 cucumber 来定义我的 BDD 步骤。

在执行了一个动作之后,许多事件将被发送到组件测试服务器,以便与预期列表进行匹配。

我正在寻找一种设计模式/方法,它可以让我灵活地在数据表中为相同的消息类型编写不同的命名字段,而不会使它们背后的代码因每个特定字段的样板而变得臃肿。

例如,给定一条具有以下定义的消息:

Order {
  String orderId;
  int size;
  int amount;
  String name;
}

我希望能够编写不同的断言:

Then I should have received following orders:
|orderId|size|amount|
|order1 | 10 | 50   |
|order2 | 5  | 10   |
Then I should have received following orders:
|orderId|name |
|order1 |ted  |
|order2 |steve|

我想到了几种执行此类验证的方法:

1) 循环接收到的消息,过滤掉所有的订单消息。然后为每个命名字段定义一个查找函数,给定一个订单消息将返回该字段的值。检查每条收到的消息上所有字段的相等性。

这种方法会留下很多样板代码,因为您必须为消息中的每个值定义特定的查找函数(这些消息可以有 100 个字段)

2) 创建一个订单 POJO。将收到的消息解析为 Order POJO。还将断言中定义的字段解析到 POJO 中。在 equals 方法中执行类似“如果从断言中设置字段,则将其包含在相等性检查中,否则将其排除”之类的操作。

这感觉更好,但当消息具有列表类型时可能会出现问题。即列表应该为空,还是空列表?我们可以有一定大小的忽略值列表吗?

必须有围绕此的文档/设计模式,但我找不到任何好的例子。任何正确方向的指针将不胜感激

标签: javatestingcucumber

解决方案


推荐阅读