为什么不进行以下工作?
Some(List()) must beSome(Nil)
'一些(列表())'有些但是List()不等于' org.specs2.matcher.ValueChecks $$anon $ 3@480ba116'
答案 0 :(得分:1)
请注意
Some(List()) must beSome(List())
也不行。
'Some(List())' is Some but List() is not equal to
'org.specs2.matcher.ValueChecks$$anon$4@48d1978f'
Actual: List()
Expected: org.specs2.matcher.ValueChecks$$anon$4@48d1978f
所以问题不在于Nil
我们知道我们真正做的是:
Some(List()).must(beSome(List()))
beSome
似乎存在问题。让我们看看beSome
正在返回的内容:
val bl = beSome(List()) // SomeCheckedMatcher[Int]
val bn = beSome(Nil) // SomeCheckedMatcher[Int]
由于返回类型正在检查整数选项:
,因此看不到val b = beSome(2) // SomeCheckedMatcher[Int]
那些不是我们的目标类型:
val myList = List() // myList: List[Nothing] = List()
val myList2 = Nil // myList2: scala.collection.immutable.Nil.type = List()
那么,怎么了?
查看documentation (Option/Either),您可以使用beSome
以下方式:
beSome
检查元素是否为Some(_)
beSome(exp)
检查元素是否为Some(exp)
beSome(matcher)
检查元素是否为Some(a)
,其中a满足匹配器
beSome(function: A => AsResult[B])
检查元素是Some(a)
,其中function(a)
返回成功的Result
(请注意Seq[A]
也是一个函数Int => A
,所以如果你想检查一下 一些序列包含在一些你需要使用匹配器:beSome(===(Seq(1)))
最后一种选择似乎是我们的问题。请注意,List()
与Seq
类似,是Int =>的函数。 A.在我们的例子中:
val myList = List() // myList: List[Nothing] = List()
val func: Int => Nothing = myList // func: Int => Nothing = List()
要解决此问题,我们应该使用匹配器(文档的第三种替代方法):
Some(List()) must beSome(beEqualTo(List()))
Some(List()) must beSome(beEqualTo(Nil))
// or
Some(List()) must beSome(be_==(List()))
Some(List()) must beSome(be_==(Nil))