ZIO 2中用ZIO Test测试失败Effect错误通道,此写法是否最符合惯例?
ZIO 2中测试失败Effect的惯用写法优化建议
你当前的测试写法是有效的,但ZIO 2提供了更符合惯用风格的简洁写法,无需手动处理Exit值。
优化后的测试代码
def spec = suite("LookupPositionProviderSpec")( suite("determinePosition")( test("Unknown hints lead to 'NoPositionDetermined'") { assertZIO(LookupPositionProvider.determinePosition(Seq(GsmFixtures.cellHintTowerGsm1.copy(cid = 4711))))( fails( equalTo( ProviderError( Lookup, NoPositionDetermined, Some("No position could be determined from List(CellHint(GSM,4711,Some(5891),Some(-70),None,None,None))") ) ) ) ) }.provide(TestLayers.findsNothingLookupPositionProvider) ) )
ZIO 2的主要变化
相比旧版ZIO,ZIO 2的zio-test库简化了失败场景的测试流程:
- 新增
assertZIO函数,可直接对Effect的结果(成功或失败)做断言,无需手动调用.exit获取退出状态 - 原有的
fails断言可直接配合assertZIO使用,无需额外处理Exit.Failure的包装逻辑 - 整体代码结构更紧凑,可读性更强,符合函数式测试的惯用风格
内容的提问来源于stack exchange,提问作者Chris W.
相关产品推荐
相关产品推荐

