如何围绕最新的#34;"#34;关键词?

时间:2016-12-13 22:18:23

标签: scala scalatest scalactic

我正在尝试围绕scalatest it个关键字构建一个包装器。但是,此解决方案似乎没有按预期工作。而且,它甚至没有编译:

trait MyFunSpec extends FunSpec {

  private val _it: FunSpec.this.ItWord = it

  protected def it(specText: String, testTags: org.scalatest.Tag*)
    // ...do something extra here...
    (testFun: => Any /* Assertion */)(implicit pos: Position): Unit = {
    _it(specText, testTags: _*)(testFun)(pos)
    // ...do something extra here...
  }
}

编译此代码后我收到的错误消息如下:

[error] MyFunSpec.scala: ambiguous reference to overloaded definition,
[error] both method it in trait MyFunSpec of type (specText: String, testTags:
  org.scalatest.Tag*)(testFun: => Any)(implicit pos:
  org.scalactic.source.Position)Unit
[error] and value it in trait FunSpecLike of type => FunSpecSpec.this.ItWord
[error] match argument types (String)

请注意,主要的想法是该方法的名称仍为it,因此将其重命名为alternativeIt并不是一个令人满意的解决方案。

有什么建议,我在这里做错了什么?任何解决方案将受到高度赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

trait MyFunSpec extends FunSpec {
  override protected val it = new ItWord {
    override def apply(specText: String,testTags: org.scalatest.Tag*)(testFun: => Any)(implicit pos: org.scalactic.source.Position): Unit = {
      println("Before")
      super.apply(specText, testTags:_*)(testFun)(pos)
      println("After")
    }
  }
}