如何在另一个流程中模拟内联的InitiatingFlow返回值

时间:2018-03-29 04:15:41

标签: corda

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

当我在Junit中运行ValidateFlowA时,如何模拟SomeBigFlow的返回值?

我已经看到一些使用registerAnswer来模拟流'返回值here的引用。我也很好奇为什么这个函数仅适用于InternalMockNetwork.MockNode但不适用于MockNetwork.StartedMockNode,这通常在junit测试期间使用)

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

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

1 个答案:

答案 0 :(得分:0)

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

总结:

  1. 制作您正在测试的FlowLogic班级open,并将调用的子流程移至open方法
  2. 要进行测试,请创建open FlowLogic类的子类,覆盖open方法以返回虚拟结果
  3. 在测试中使用此子类