Corda 在@InitiatedBy端上集成测试事务输出事务结束后

Corda 在@InitiatedBy端上集成测试事务输出事务结束后,corda,Corda,在这种情况下,我有一个名为ProposeMemberFlow的@InitiatingFlow,和一个相应的@InitiatedByProposeMberFlowResponder。我想在我的集成测试中包括一些测试,测试响应者在FinalityFlow子流被发起流启动后是否有一个事务输出状态 我天真地在响应流中调用了waitForLedgerCommit,对CollectSignaturesFlow进行了post响应,但我发现启动流在响应流完成之前就完成了—可能后者正在等待vault更新 我正在通

在这种情况下,我有一个名为ProposeMemberFlow的
@InitiatingFlow
,和一个相应的
@InitiatedBy
ProposeMberFlowResponder。我想在我的集成测试中包括一些测试,测试响应者在FinalityFlow子流被发起流启动后是否有一个事务输出状态

我天真地在响应流中调用了
waitForLedgerCommit
,对CollectSignaturesFlow进行了post响应,但我发现启动流在响应流完成之前就完成了—可能后者正在等待vault更新

我正在通过CordaService进行集成测试-使用
expectEvents
等待
Vault Update
的“corda方式”是否可以让我知道何时可以安全地使用CordaService进行测试?很像


谢谢

我还没有听说过通过
CordaService进行集成测试
。通常,您将使用节点驱动程序编写集成测试

下面是一个例子:

这段代码启动一组节点,然后使用RPC检查节点的某些条件

在您的情况下,您希望在节点驱动程序中使用以下RPC操作集:

  • CordaRPCOps.startFlowDynamic
    在节点A的RPC句柄上运行
    ProposeMemberFlow
  • CordaRPCOps.vaultQueryBy
    在节点B的RPC句柄上检查是否已将正确的状态写入vault
另一种选择是使用模拟网络(例如)。您可能会认为这不是一个集成测试,因为您运行的是模拟节点而不是真实节点。但是,模拟节点只是
AbstractNode
接口的另一个实现,出于测试的目的,模拟节点的行为应该像普通节点一样。

谢谢Joel:-)我喜欢从入口点到系统进行集成测试。在我的例子中,这是一个(基于辫子的)CordaService。所以我真的不想从流量级别开始。也就是说,我问的是“科达方式”,你的回答相当简洁地概括了这一点。所以谢谢你。花时间回答的话太多了:-)