我有一个流程,该流程查询一个oracle以获取带符号的随机数据(代表骰子掷骰),然后该随机数据成为结果交易的输出。具体来说,将发布新的DiceRollState。
在单元测试中,我需要确保给定的DiceRollState具有一定的值(反映骰子上的点数)以测试结果逻辑。例如-当DiceRollState的值为5时,我需要执行任务X;当DiceRollState的值为6时,我需要执行另一个操作。
下面是我用来在单元测试中运行流程的代码片段。
val rollDiceFlow = RollDiceFlow(gameBoardState.linearId)
val futureWithDiceRollPlayer1 = nodeA.startFlow(rollDiceFlow)
// Can I do anything here to check the value
// of the outputted DiceRollState and revert / Rerun as required?
network.runNetwork()
futureWithDiceRollPlayer1.getOrThrow()
如果不希望模拟流的结果,是否有任何方法可以还原?我可以执行以下任何操作吗?
在运行流之前获取模拟网络的深层副本吗?
在检查了可完成未来的内容后,如何以某种方式还原其影响?
使用更好的模式来模拟来自oracle的响应吗?
答案 0 :(得分:1)
(不幸的是)这里的答案是,这不是Corda的可测试设计模式。将模拟网络恢复为以前的状态可能是当前测试的一项有用功能,但目前尚不可用。
解决方案是:
我选择重构rollDiceFlow以接受构建的骰子骰。 oracle在实际CorDapp的包装流中检索构造的骰子卷,但可以直接提供以进行测试。