gpt4 book ai didi

scala - 断言值的简洁方法与 ScalaTest 中的给定模式匹配

转载 作者:行者123 更新时间:2023-12-03 23:50:53 25 4
gpt4 key购买 nike

有没有一种很好的方法来检查 ScalaTest 中的模式匹配是否成功? scalatest-users 中给出了一个选项邮件列表:

<value> match {
case <pattern> =>
case obj => fail("Did not match: " + obj)
}

但是,它不会组合(例如,如果我想使用 Inspectors API 断言列表的 2 个元素与模式完全匹配)。我可以编写一个带有部分函数文字的匹配器,如果它被定义则成功(如果我也想在消息中获取模式,它必须是一个宏)。有更好的选择吗?

最佳答案

我不是 100% 确定我理解您提出的问题,但一种可能的答案是从 Inside 特征中使用 inside 。鉴于:

case class Address(street: String, city: String, state: String, zip: String)
case class Name(first: String, middle: String, last: String)
case class Record(name: Name, address: Address, age: Int)

你可以写:
inside (rec) { case Record(name, address, age) =>
inside (name) { case Name(first, middle, last) =>
first should be ("Sally")
middle should be ("Ann")
last should be ("Jones")
}
inside (address) { case Address(street, city, state, zip) =>
street should startWith ("25")
city should endWith ("Angeles")
state should equal ("CA")
zip should be ("12345")
}
age should be < 99
}

这适用于断言或匹配器。详情在这里:

http://www.scalatest.org/user_guide/other_goodies#inside

另一个选项,如果您使用匹配器并且只想断言某个值匹配特定模式,则可以使用 matchPattern 语法:
val name = Name("Jane", "Q", "Programmer")
name should matchPattern { case Name("Jane", _, _) => }

http://www.scalatest.org/user_guide/using_matchers#matchingAPattern

您指向的 scalatest-users 帖子来自 2011 年。从那时起,我们为此用例添加了上述语法。

账单

关于scala - 断言值的简洁方法与 ScalaTest 中的给定模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com