为什么scala不';不能从特征中识别方法

为什么scala不';不能从特征中识别方法,scala,scala-2.8,Scala,Scala 2.8,首先,我有一个特点: import _root_.com.thoughtworks.selenium._ import org.scalatest.matchers.ShouldMatchers import org.scalatest.matchers.ShouldMatchers._ trait SeleniumField extends ShouldMatchers { val name : String def selenium : Selenium def text

首先,我有一个特点:

import _root_.com.thoughtworks.selenium._
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.matchers.ShouldMatchers._

trait SeleniumField extends ShouldMatchers {

  val name : String

  def selenium : Selenium

  def text : String = { return selenium.getValue(name) }

  def is(v:String) : Boolean  = { this.value equals v }

  def set(v:String) =  { selenium.`type`( name , v ) }

}
然后我创建了一个具有以下特征的scala类:

import _root_.com.thoughtworks.selenium._

class WebAppField(sel:Selenium, nam: String) extends SeleniumField {

  def selenium = sel

  override val name = nam
}
然后当我尝试在代码中使用它时:

val rodzaj =  new WebAppField(selenium, "RODZAJ")
rodzaj text should equal  "K"
我得到:

error: not found: value should
[INFO]    rodzaj text should equal  "K"
我做错了什么


Scala 2.8版字符串通常没有
should
方法。ScalaTest通过隐式转换使其可用。 在编写测试的地方,您需要以下导入:

import org.scalatest.matchers.ShouldMatchers._
把这个隐含的概念纳入范围。导入显示在正在测试的代码中是不够的


实际上,在被测试的代码中有任何对ScalaTest的引用都有点奇怪。通常,对测试框架的引用只应出现在测试中。

当您在Scala中省略方法调用中的点和括号时,它们总是以相同的方式解析,假设使用中缀符号和单参数

rodzaj text should equal "K"

rodzaj.text(should).equal("K")
尝试将其改写为:

rodzaj.text should equal("K")
或者,您可以完全标点如下:

rodzaj.text.should(equal("K"))

嗯,虽然这是一个合理的建议,但在我看来,David的回答可能是对您看到的实际错误消息的正确解释。当然,最后,rodzaj.text.should(等于(“K”))很好:)我保证我会阅读更多scaladoc