首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala测试1.2的简单测试

Scala测试1.2的简单测试
EN

Stack Overflow用户
提问于 2011-02-06 14:28:08
回答 1查看 1.6K关注 0票数 2

我试图使用IntelliJ 10中的Scala2.8和ScalaTest1.2运行一个测试

我不太懂scala语法,所以你能帮上忙吗?:)

代码语言:javascript
复制
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)
    }
  }
}

错误是:

代码语言:javascript
复制
error: value in is not a member of java.lang.String
"A Button Observer should observe button clicks" in {

下面是代码的其余部分:

代码语言:javascript
复制
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的“编程Scala”一书。

我尝试将代码更新到Scala测试1.2,但失败了。下面是原始测试(注意导入和扩展类):

代码语言:javascript
复制
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 (没有发现测试错误):

代码语言:javascript
复制
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)
    }
  }
}
}

工作测试:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-06 15:06:43

我认为您需要像这样用WordSpec扩展ShouldMatchers

代码语言:javascript
复制
class ButtonObserverSpec extends WordSpec with ShouldMatchers {...}

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

bdd

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4913867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档