【发布时间】: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