2011-02-06 105 views
2

我想在10的IntelliJ使用Scala测试1.2简单测试使用Scala测试1.2

我不知道很多斯卡拉语法运行使用的Scala 2.8的测试,这样你就可以这段代码帮助吗? :)

package test.ui { 

import org.scalatest._ 
import matchers.ShouldMatchers 
import ui._ 
import observer._ 

object ButtonObserverSpecification extends Spec { 
    "A Button Observer should observe button clicks" in { 
     val observableButton = new ObservableButton("Okay") 
     val buttonObserver = new ButtonCountObserver 
     observableButton.addObserver(buttonObserver) 

     for (i <- 1 to 3) observableButton.click() 
     buttonObserver.count should equal (3) 
    } 
    } 
} 

的错误是:

error: value in is not a member of java.lang.String 
"A Button Observer should observe button clicks" in { 

这里是代码的其余部分:

package ui { 

abstract class Widget 

class Button(val label: String) extends Widget { 
    def click() = { 
    println (label + " was clicked") 
    } 
} 

} 

package observer { 

trait Subject { 
    type Observer = {def receiveUpdate(subject: Any)} 
    private var observers = List[Observer]() 

    def addObserver(observer: Observer) = observers ::= observer 

    def notifyObservers = observers foreach (_.receiveUpdate(this)) 
} 

} 

package ui { 

import observer._ 

class ObservableButton(name: String) extends Button(name) with Subject { 
    override def click() = { 
    super.click() 
    notifyObservers 
    } 
} 

class ButtonCountObserver { 
    var count = 0 

    def receiveUpdate(subject: Any) = count += 1 
} 

} 

的代码是从书 “编程斯卡拉” 从奥赖利

我试过了将代码约会到Scala测试1.2,但失败。原来这里是测试(注意进口和扩展分类):

package ui 
import org.specs._ 
import observer._ 

object ButtonObserverSpec extends Specification { 
    "A Button Observer" should { 
    "observe button clicks" in { 
     val observableButton = new ObservableButton("Okay") 
     val buttonObserver = new ButtonCountObserver 
     observableButton.addObserver(buttonObserver) 

     for (i <- 1 to 3) observableButton.click() 
     buttonObserver.count mustEqual 3 
    } 
    } 
} 

试验序号3(错误是没有找到测试)

package test.ui { 

import org.scalatest._ 
import matchers.ShouldMatchers 
import ui._ 
import observer._ 
import org.scalatest.junit.JUnitRunner 
import org.junit.runner.RunWith 

@RunWith(classOf[JUnitRunner]) 
object ButtonObserverTest extends WordSpec with ShouldMatchers { 
    "A Button Observer" should { 
    "observe button clicks" in { 
     val observableButton = new ObservableButton("Okay") 
     val buttonObserver = new ButtonCountObserver 
     observableButton.addObserver(buttonObserver) 

     for (i <- 1 to 3) observableButton.click() 
     buttonObserver.count should equal (3) 
    } 
    } 
} 
} 

工作试验:

package test.ui { 

import org.scalatest.WordSpec 
import org.scalatest.matchers.ShouldMatchers 
import ui._ 
import observer._ 

class ButtonObserverTest extends WordSpec with ShouldMatchers { 
    "A Button Observer" should { 
    "observe button clicks" in { 
     val observableButton = new ObservableButton("Okay") 
     val buttonObserver = new ButtonCountObserver 
     observableButton.addObserver(buttonObserver) 

     for (i <- 1 to 3) observableButton.click() 
     buttonObserver.count should equal (3) 
    } 
    } 
} 
} 

PS:如果你不知道如何的IntelliJ运行阶测试,看this blog post - IntelliJ Now Supports ScalaTest

回答

4

我认为你需要与ShouldMatchers延长WordSpec这样的:

class ButtonObserverSpec extends WordSpec with ShouldMatchers {...} 

你可以在这里找到更多的例子:

http://www.scalatest.org/getting_started_with_bdd

+0

它运行,但它说没有发现测试... – Belun 2011-02-06 15:19:12