如何从Cucumber表创建复杂对象?

时间:2016-10-04 09:20:28

标签: java cucumber

我不知道如何从.feature读取表格并正确填充

| payInstruction.custodian | and | payInstruction.acctnum |
像内部类一样。

我有一张桌子:

  | confirmationId | totalNominal | payInstruction.custodian | payInstruction.acctnum |
  | 1              | 100.1321     | yyy                      | yyy                    |
  | 2              | 100.1351     | zzz                      | zzz                    |

我有类模板,它具有下一个结构:

class Confirmation {
String confirmationId;
double totalNominal;
PayInstruction payInstruction;

}

class PayInstruction  {
String custodian;
String acctnum;
}

将表格自动转换为List<Confirmation>时出错,因为无法识别payInstruction.acctnum并付费payInstruction.custodian

任何帮助?

2 个答案:

答案 0 :(得分:1)

我的方法是为Confirmation提供包含四个基元的构造函数,然后在PayInstruction的构造函数中创建Confirmation

答案 1 :(得分:0)

我知道这个问题有点陈旧,但谷歌确实把我赶到了这里,并且可以在未来与其他人合作。

.feature根据问题进行调整:

Given some confirmations:
| confirmationId | totalNominal |
| 1              | 100.1321     |
| 2              | 100.1351     |
And some pay instructions:
| confirmationId | custodian | acctnum |
| 1              | yyy       | yyy     |
| 2              | zzz       | zzz     |

步骤实施:

Map<Integer, Confirmation> confirmations;

@Given('^some confirmations:$)
public void someConfirmations(List<Confirmation> confirmations) {
  this.confirmations = confirmations.stream().collect(Collectors.toMap(Confirmation::getConfirmationId, Function.identity()));
}

@And('^some pay instructions:$)
public void somePayInstructions(List<PayInstructionTestObject> payInstructions) {
  payInstructions.forEach(pi -> 
    this.confirmations.get(pi.getConfirmationId()).addPayInstruction(pi.toPayInstruction())
  );
}

诀窍是在测试文件夹中创建一个PayInstruction 子类,其中包含一个确认ID作为相关标识符,以检索正确的确认。 toPayInstruction方法用作转换器来摆脱测试对象。<​​/ p>

希望Java和功能代码几乎正在编译,我写这篇文章时没有有效地运行它。可能需要稍作调整才能使其运行。

最初的商业模式没有受到解决方案的影响,没有打破/调整它进行测试。