1
我正在嘗試圍繞scalatest的it
關鍵字構建一個包裝。但是,這種解決方案似乎沒有按照預期工作。此外,它甚至不編譯:如何構建一個圍繞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
這不是一個令人滿意的解決方案。
任何建議,我在這裏做錯了什麼?任何解決方案將不勝感激!謝謝!
當您嘗試別名它_IT,編譯器會很困惑,因爲有在FunSpecLike,如果它的定義和另一個在MyTrait(因此過載)。其次,爲了真正覆蓋它,你應該實際覆蓋val it = new ItWord {...}。在那裏匿名類超級參考FunSpec中舊的ItWord實現。 – HTNW