【问题标题】:Corda - Unit Testing Flows That End Up In HospitalCorda - 最终在医院进行的单元测试流程
【发布时间】:2019-12-28 23:16:47
【问题描述】:

我正在对一个我知道会失败的流程进行单元测试。

assertFailsWith<JdbcSQLIntegrityConstraintViolationException> {
    nodeA.issueState(...) // Note, issueState is an extension on StartedMockNode
}

失败的原因是由于架构上的唯一键/索引违规,事务中正在输出的状态无法复制:

org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键违规

在单元测试中发生这种情况时,输出显示:

[INFO] 12:41:22,600 [模拟网络] statemachine.StaffedFlowHospital。 - [net.corda.node.services.statemachine.StaffedFlowHospital$TransitionErrorGeneralPractitioner@49a4216e] 为通宵观察而保留的流量错误(错误为 org.hibernate.exception.ConstraintViolationException:无法执行语句){actor_id=仅用于测试,actor_owning_identity= O=PartyA,L=London,C=GB,actor_store_id=TEST,fiber-id=10000012,flow-id=932a7d4e-e695-4096-b3d8-efbcdbfa5b21,invocation_id=fcf25c8a-6bf1-4dce-8e65-3c84c96b8523,invocation_timestamp= 2019-12-28T12:41:22.402Z, origin=仅用于测试, session_id=fcf25c8a-6bf1-4dce-8e65-3c84c96b8523, session_timestamp=2019-12-28T12:41:22.402Z, thread-id=1309}

[WARN] 12:42:18,805 [FlowHospitalJobTimer] statemachine.StaffedFlowHospital。 - 有 1 个流量留作过夜观察。受影响的流 id:932a7d4e-e695-4096-b3d8-efbcdbfa5b21

[WARN] 12:43:18,804 [FlowHospitalJobTimer] statemachine.StaffedFlowHospital。 - 有 1 个流量留作过夜观察。受影响的流 id:932a7d4e-e695-4096-b3d8-efbcdbfa5b21

问题是测试挂起并且永远不会完成。我设法通过在生成的getOrThrow 函数上添加持续时间来使测试失败@ 987654323@,但这对我来说似乎是错误的,因为流程由于超时而失败,而不是因为底层例外。

.getOrThrow(Duration.ofSeconds(10))

java.lang.AssertionError: 期望抛出类 org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException 的异常,但是是 java.util.concurrent.TimeoutException

测试最终被送到流式医院​​的流的正确方法是什么?

【问题讨论】:

    标签: corda


    【解决方案1】:

    我通过断言TimeoutException 来测试这些,就像你提到的使用assertFailsWith 一样。当前的医院逻辑是在发生任何数据库错误(包括违反约束)时保持流量以供观察。应将逻辑添加到流中以预检查受约束的字段。

    因为官方错误是由于流程实际上没有异常失败而导致的超时,所以没有办法解决这个问题。

    【讨论】:

    • 是否有任何原因导致底层异常不会冒泡到流中并从那里抛出?
    • 在我看来,因为我们不想给人一种流程失败的印象。是的,有一个错误,但如果再次尝试可能会发生错误(这是保留观察所代表的流)。抛出异常表示已经异常失败,应该由客户端处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多