集成测试@InitiatedBy侧过帐交易输出的最终结果

我有一个情况,我有@InitiatingFlow ,称为ProposeMemberFlow,和相应的@InitiatedBy ProposeMemberFlowResponder。 我希望在我的集成测试中包含一些东西,这些东西测试响应者在启动流启动了FinalityFlow子流之后有一个事务输出状态。

我天真地在响应流中调用了waitForLedgerCommit ,发布了对CollectSignaturesFlow的响应,但是我发现启动流程在响应流程完成之前完成 – 大概是后者正在等待保险库更新。

我是通过CordaService进行集成测试 – 是使用expectEvents等待VaultUpdate的“有线方式”,以便我知道何时可以安全地测试CordaService? 很像这里 ?

谢谢

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

这是一个例子: https : //github.com/corda/cordapp-template-kotlin/blob/release-V2/cordapp/src/integrationTest/kotlin/com/template/DriverBasedTest.kt

这段代码启动一组节点,然后使用RPC来检查节点的一些状况。

在你的情况下,你需要在节点驱动中使用下列一组RPC操作:

  • CordaRPCOps.startFlowDynamic在节点A的RPC句柄上运行ProposeMemberFlow
  • CordaRPCOps.vaultQueryBy在节点B的RPC句柄上检查是否写入了正确的状态

另一个选择是使用模拟网络(例如https://github.com/corda/cordapp-example/blob/release-V2/kotlin-source/src/test/kotlin/com/example/flow/IOUFlowTests.kt )。 你可能会认为这不是一个集成测试,因为你运行的是模拟节点而不是真正的节点。 但是,模拟节点只是AbstractNode接口的另一个实现,为了测试的目的,它应该像普通节点一样运行。