2011-04-22 56 views
2

首先我有特点:为什么Scala没有从特质识别方法

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

回答

7

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

rodzaj text should equal "K" 

相同

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

尝试重写它:

rodzaj.text should equal("K") 

,或者你可以完全断句为:

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

当然最后,rodzaj.text.should(等于(“K”)),是好的:)我保证我会阅读更多scaladoc – 2011-04-26 06:05:39

1

串不通常具有should方法。 ScalaTest通过隐式转换使其可用。 在你写你的测试的地方,你需要这样导入:

import org.scalatest.matchers.ShouldMatchers._ 

提起这隐入范围。导入出现在正在测试的代码中是不够的。

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

+0

嗯,虽然这是合理的建议,在我看来,大卫的答案是可能的对于您看到的实际错误消息,正确的解释。 – 2011-04-22 12:55:52

相关问题