【问题标题】:Why scala doesn't recognize method from trait为什么scala不能从特征中识别方法
【发布时间】:2011-08-10 22:37:31
【问题描述】:

首先我有特点:

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 版

【问题讨论】:

    标签: scala scala-2.8


    【解决方案1】:

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

    rodzaj text should equal "K"
    

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

    尝试将其重写为:

    rodzaj.text should equal("K")
    

    或者你可以完全标点为:

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

    【讨论】:

    • 当然最后,rodzaj.text.should(equal("K")),很好:) 我保证我会阅读更多的 scaladoc
    【解决方案2】:

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

    import org.scalatest.matchers.ShouldMatchers._
    

    将隐式带入范围。导入出现在被测试的代码中是不够的。

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

    【讨论】:

    • 嗯,虽然这是合理的建议,但在我看来,大卫的回答可能是对您所看到的实际错误消息的正确解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多