Почему Scala не распознает метод по признаку - PullRequest
2 голосов
/ 22 апреля 2011

Прежде всего, у меня есть черта:

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 ver 2.8

Ответы [ 2 ]

7 голосов
/ 22 апреля 2011

Когда вы опускаете точки и скобки в вызовах методов в Scala, они всегда анализируются одинаково, принимая во внимание инфиксную запись и одиночные аргументы.

rodzaj text should equal "K"

совпадает с

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

Попробуйте переписать это как:

rodzaj.text should equal("K")

или вы можете полностью пунктуировать как:

rodzaj.text.should(equal("K"))
1 голос
/ 22 апреля 2011

Строка обычно не имеет should метода. ScalaTest делает его доступным посредством неявного преобразования. В том месте, где вы пишете свой тест, вам нужен этот импорт:

import org.scalatest.matchers.ShouldMatchers._

, чтобы привести это неявное в сферу. Недостаточно, чтобы импорт отображался в тестируемом коде.

Довольно странно вообще иметь какие-либо ссылки на ScalaTest в тестируемом коде. Обычно ссылки на ваш тестовый фреймворк должны появляться только в ваших тестах.

...