#scala #scala-2.8
#scala #scala-2.8
Вопрос:
Прежде всего, у меня есть trait:
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
Ответ №1:
Когда вы опускаете точки и круглые скобки при вызовах методов в Scala, они всегда анализируются одинаково, предполагая инфиксную нотацию и одиночные аргументы.
rodzaj text should equal "K"
это то же самое, что
rodzaj.text(should).equal("K")
Попробуйте переписать его как:
rodzaj.text should equal("K")
или вы могли бы полностью расставить знаки препинания как:
rodzaj.text.should(equal("K"))
Комментарии:
1. Конечно, последнее, rodzaj.text.should(равно(«K»)), хорошо 🙂 Я обещаю, что буду читать больше scaladoc
Ответ №2:
Строка обычно не имеет should
метода. ScalaTest делает его доступным с помощью неявного преобразования. В том месте, где вы пишете свой тест, вам нужен этот импорт:
import org.scalatest.matchers.ShouldMatchers._
чтобы включить это неявное в область видимости. Этого недостаточно, чтобы импорт появился в тестируемом коде.
На самом деле, довольно странно иметь какие-либо ссылки на ScalaTest вообще в тестируемом коде. Обычно ссылки на ваш тестовый фреймворк должны появляться только в ваших тестах.
Комментарии:
1. Хм, хотя это разумный совет, мне кажется, что ответ Дэвида, вероятно, является правильным объяснением фактического сообщения об ошибке, которое вы видите.