结合beAnInstanceOf和"又名"

时间:2015-06-29 18:06:06

标签: specs2

我遇到了奇怪的行为,我想知道这是一个错误,还是我错过了什么。

以下代码:

class Foo extends SpecificationWithJUnit {

  "This test should pass" in new ctx {
   Bar(Zoo("id")) must haveInstanceZoo
 }

 trait ctx extends Scope {

   def haveInstanceZoo : Matcher[Bar] = 
     beAnInstanceOf[Zoo] ^^ { (_: Bar).z aka "instanceOfZoo" }
 }
}

case class Bar(z: Zoo)
case class Zoo(id: String)

失败,出现以下异常:

'org.specs2.matcher.ThrownExpectationsCreation$$anon$1@48072f8c: 
 org.specs2.matcher.ThrownExpectationsCreation$$anon$1' 
 is not an instance of 'com.test.Zoo'

如果我删除"又名"从自定义匹配器一切正常。

思想?

由于 Netta

1 个答案:

答案 0 :(得分:3)

您不能像这样使用aka,因为您实际上是在试图断言Expectation,您使用aka创建的对象是Zoo的实例。

如果要在匹配器上指定其他失败消息,可以写下:

def haveInstanceZoo: Matcher[Bar] = (bar: Bar) =>
  (bar.z.isInstanceOf[Zoo], "bar.z is not an instance of Zoo")