我遇到的情况是@InitiatingFlow
,名为ProposeMemberFlow,以及相应的@InitiatedBy
ProposeMemberFlowResponder。我希望在我的集成测试中包含一些测试响应者在FinalityFlow子流后已经被启动流启动的事务输出状态之一的东西。
我在响应流程中天真地调用了waitForLedgerCommit
,在响应CollectSignaturesFlow之后,但我发现启动流程在响应流程之前完成 - 可能是后者正在等待Vault更新。
我通过CordaService进行集成测试 - 是" Corda方式"使用expectEvents
等待VaultUpdate
以便我知道何时可以安全地测试CordaService?很像here?
由于
答案 0 :(得分:1)
我还没有听说过CordaService
的集成测试。通常,您可以使用节点驱动程序编写集成测试。
这段代码启动一组节点,然后使用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
接口的另一个实现,并且应该像普通节点一样用于测试。