我正在测试一个我知道会失败的流程。
assertFailsWith<JdbcSQLIntegrityConstraintViolationException> {
nodeA.issueState(...) // Note, issueState is an extension on StartedMockNode
}失败的原因是,由于模式上存在唯一的键/索引冲突,事务中正在输出的状态不能重复:
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键冲突
当这种情况发生在单元测试中时,输出显示:
信息12:41:22,600伪装网络statemachine.StaffedFlowHospital。-用于测试的invocation_id=fcf25c8a-6bf1-4dce-8e65-3c84c96b8523,invocation_timestamp=2019-12-28T12:41:22.402Z,{actor_id=Only,actor_owning_identity=O=PartyA,L=London,C=GB,actor_store_id=TEST,fiber=10000012,Flow -id=932a7d4e-e 695-4096-b3d8-efbcdbfa5b21,session_id=fcf25c8a-6bf1-4dce-8e65-3c84c96b8523,session_timestamp=2019-12-28T12:41:22.402Z,线程-id=1309}
警告12:42:18,805 FlowHospitalJobTimer statemachine.StaffedFlowHospital。-有1条流量可供夜间观察。受影响的流ids: 932a7d4e-e695-4096-b3d8-efbcdbfa5b21
警告12:43:18,804 FlowHospitalJobTimer statemachine.StaffedFlowHospital。-有1条流量可供夜间观察。受影响的流ids: 932a7d4e-e695-4096-b3d8-efbcdbfa5b21
问题是测试挂起,永远不会完成。我通过在结果的getOrThrow函数上添加一个持续时间来使测试失败,但对我来说,这似乎是错误的,因为流是由于超时而失败的,而不是因为根本的异常。
.getOrThrow(Duration.ofSeconds(10))类org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException的异常将被抛出,但
java.lang.AssertionError:期望抛出类的异常,但为java.util.concurrent.TimeoutException
有什么正确的方法来测试最终被送往flow医院的流?
发布于 2019-12-28 15:16:47
我通过在TimeoutException上断言来测试这些信息,就像使用assertFailsWith时提到的那样。当前的医院逻辑是,如果发生任何数据库错误,包括违反约束的情况,都要保持流程进行观察。应该将逻辑添加到流中,以预检查受约束字段。
因为官方错误是一个超时,因为流程实际上并不是异常失败,所以没有办法解决这个问题。
https://stackoverflow.com/questions/59511061
复制相似问题