假设我的值为Some("aaabbbccc")
,我想测试Some
中的值是否包含其他字符串。
我试过了:
val myvalue = Some("aaabbbccc")
myvalue must beSome(contain("bbb"))
它无法编译,但我找不到工作的。
如何写这样的断言?
答案 0 :(得分:1)
你可能会遇到这种情况
None must be none
Some("foo") must beSome(contain("f"))
这两个语句不会编译。
编译器会抱怨
method apply in trait MatchResult cannot be accessed in org.specs2.matcher.MatchResult[Option[T]]
[error] None must be none
[error]
^
只需在第一个语句的末尾添加一个;
,一切都会好起来
答案 1 :(得分:0)
您可以尝试使用以下自定义匹配器,直接从文档中获取:http://www.scalatest.org/user_guide/matchers_quick_reference
val beOdd =
Matcher { (left: Int) =>
MatchResult(
left % 2 == 1,
left + " was not odd",
left + " was odd"
)
}
3 should beOdd
那说......或许有一种很好的scala表达你所追求的东西。
我刚刚看到字符串包含matcher,但是如何使用Option [String] ..?
string should include ("seven")
好的..得到了它:
option.value should be < 7
在你的情况下会是:
myvalue should be ('defined)
myvalue.value should include ("bbb")
答案 2 :(得分:0)
scala> val myvalue = Some("aaabbbccc")
myvalue: Some[String] = Some(aaabbbccc)
scala> myvalue exists (_.contains("bbb"))
res0: Boolean = true
scala> myvalue exists (_.contains("abc"))
res1: Boolean = false
您可以轻松地将其调整为specs2:
(myvalue exists (_.contains("bbb"))) must beTrue
真正的选择是在myValue
碰巧为无的情况下,您希望测试如何做出反应。如果您希望它在None上失败,请使用上面的内容。如果您希望它成功,请改用:
(myValue forall (_.contains("bbb"))) must beTrue
在这两种情况下,它都会在Some
上进行您想要的测试。