一些列表 specs2 匹配器
Some List specs2 matcher
为什么以下不起作用?
Some(List()) must beSome(Nil)
'Some(List())' 是 Some 但 List() 不等于 'org.specs2.matcher.ValueChecks$$anon@480ba116'
请注意
Some(List()) must beSome(List())
也不行。
'Some(List())' is Some but List() is not equal to
'org.specs2.matcher.ValueChecks$$anon@48d1978f'
Actual: List()
Expected: org.specs2.matcher.ValueChecks$$anon@48d1978f
所以问题不是Nil
我们知道我们真正在做的是这样的:
Some(List()).must(beSome(List()))
beSome
似乎有问题。让我们看看 beSome
是什么 returning:
val bl = beSome(List()) // SomeCheckedMatcher[Int]
val bn = beSome(Nil) // SomeCheckedMatcher[Int]
这看起来不对,因为 return 类型就像正在检查整数的选项:
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
check if an element is Some(_)
beSome(exp)
check if an element is Some(exp)
beSome(matcher)
check if an element is Some(a)
where a satisfies the matcher
beSome(function: A => AsResult[B])
check if an element is Some(a)
where function(a)
returns a successful Result
(note that
a Seq[A]
is also a function Int => A
so if you want to check that
a sequence is contained in Some you need to use a matcher:
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))
为什么以下不起作用?
Some(List()) must beSome(Nil)
'Some(List())' 是 Some 但 List() 不等于 'org.specs2.matcher.ValueChecks$$anon@480ba116'
请注意
Some(List()) must beSome(List())
也不行。
'Some(List())' is Some but List() is not equal to
'org.specs2.matcher.ValueChecks$$anon@48d1978f'
Actual: List()
Expected: org.specs2.matcher.ValueChecks$$anon@48d1978f
所以问题不是Nil
我们知道我们真正在做的是这样的:
Some(List()).must(beSome(List()))
beSome
似乎有问题。让我们看看 beSome
是什么 returning:
val bl = beSome(List()) // SomeCheckedMatcher[Int]
val bn = beSome(Nil) // SomeCheckedMatcher[Int]
这看起来不对,因为 return 类型就像正在检查整数的选项:
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
check if an element isSome(_)
beSome(exp)
check if an element isSome(exp)
beSome(matcher)
check if an element isSome(a)
where a satisfies the matcher
beSome(function: A => AsResult[B])
check if an element isSome(a)
wherefunction(a)
returns a successfulResult
(note that aSeq[A]
is also a functionInt => A
so if you want to check that a sequence is contained in Some you need to use a matcher: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))