【问题标题】:Simple test with Scala Test 1.2使用 Scala Test 1.2 进行简单测试
【发布时间】:2011-06-22 06:45:30
【问题描述】:

我正在尝试在 IntelliJ 10 中使用 Scala 2.8 和 Scala Test 1.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 的《Programming Scala》一书

我尝试将代码更新为 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 测试,请参阅 this blog post - IntelliJ Now Supports ScalaTest

【问题讨论】:

    标签: scala intellij-idea scalatest


    【解决方案1】:

    我认为您需要像这样扩展 WordSpecShouldMatchers

    class ButtonObserverSpec extends WordSpec with ShouldMatchers {...}
    

    您可以在此处找到更多示例:

    http://www.scalatest.org/getting_started_with_bdd

    【讨论】:

    • @Belun - 您可以添加注释 @RunWith(classOf[JUnitRunner]) 到测试类(如果您使用 JUnit 运行器)或使用 IDEA 的 ScalaTest 运行器。
    • 我正在使用 Idea ScalaTest... 仍然没有找到测试
    • @Belun - 你有 classnotfound 异常吗?
    • 没有。它只是说没有找到测试。 (我确实删除了@RunWith 并使用 IDEA Runner 运行 - 创建了运行配置并选择了 Scala 测试)
    • @Belun - 哦......刚刚注意到......你能创建class而不是object吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2015-06-30
    • 1970-01-01
    • 2013-05-23
    • 2015-10-25
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多