如何在另一个流程中模拟内联 InitiatingFlow return 值

How to mock an inlined InitiatingFlow return value during another flow

我有 SomeBigFlow 调用其中的多个子流,即 ValidateFlowAValidateFlowB。假设 A 和 B 必须启动流程而不是功能。

当我在 Junit 中 运行 SomeBigFlow 时,如何为 ValidateFlowA 模拟 return 值?

我看到一些关于使用 registerAnswer 模拟流的 return 值 here 的参考资料。我也很好奇为什么这个函数只适用于 InternalMockNetwork.MockNode 而不是通常在 junit 测试期间使用的 MockNetwork.StartedMockNode)

我想我可以通过 node[1].registerAnswer(ValidateFlowA.class, 20) 来复制它。但是当我 运行 node[1].startFlow(SomeBigFlow).resultFuture.getOrThrow() 时,ValidateFlowA 仍在使用其默认的 call 实现而不是 return 模拟的 20 整数值。可能是我用错了。

任何关于如何使这项工作的指示,或者是否有实现模拟内联子流的解决方案 returned 值?我能想到的唯一其他方法是有一个经验法则,无论何时调用内联子流,都将它们放在 open fun 中,可以在模拟网络测试期间覆盖它 - 这使得内联子流变得乏味,希望有一种更简洁的方法。

目前,您必须使用与此处概述的方法类似的方法:Corda with mockito_kotlin for unit test

总结:

  1. 使您正在测试的 FlowLogic class open,并将对子流的调用移动到 open 方法中
  2. 为了测试,创建一个 open FlowLogic class 的子 class ,您将 open 方法重写为 return虚拟结果
  3. 在测试中使用这个子class