如何在另一个流程中模拟内联 InitiatingFlow return 值
How to mock an inlined InitiatingFlow return value during another flow
我有 SomeBigFlow
调用其中的多个子流,即 ValidateFlowA
、ValidateFlowB
。假设 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。
总结:
- 使您正在测试的
FlowLogic
class open
,并将对子流的调用移动到 open
方法中
- 为了测试,创建一个
open
FlowLogic
class 的子 class ,您将 open
方法重写为 return虚拟结果
- 在测试中使用这个子class
我有 SomeBigFlow
调用其中的多个子流,即 ValidateFlowA
、ValidateFlowB
。假设 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。
总结:
- 使您正在测试的
FlowLogic
classopen
,并将对子流的调用移动到open
方法中 - 为了测试,创建一个
open
FlowLogic
class 的子 class ,您将open
方法重写为 return虚拟结果 - 在测试中使用这个子class