2

IntelliJ10のScala2.8とScalaTest1.2を使用してテストを実行しようとしています

私はscalaの構文をあまり知らないので、このコードを手伝ってもらえますか?:)

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
}

}

コードは、Oreillyの「ProgrammingScala」という本からのものです。

コードを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でscalaテストを実行する方法がわからない場合は、このブログ投稿を参照してください-IntelliJがScalaTestをサポートするようになりました

4

1 に答える 1

4

私はあなたがこのように拡張する必要があると思いWordSpecますShouldMatchers

class ButtonObserverSpec extends WordSpec with ShouldMatchers {...}

あなたはここでより多くの例を見つけることができます:

http://www.scalatest.org/getting_started_with_bdd

于 2011-02-06T15:06:43.593 に答える