使用ScalaTest编译错误?

时间:2016-04-28 22:21:44

标签: scala junit scalatest

使用ScalaTest时出现了一个奇怪的错误。 我有以下代码:

import org.scalatest.junit.JUnit3Suite;
import Element.elem;

class ElementSuite extends JUnit3Suite {

  def testD() {
    val ele = elem('x', 2, 3);
    assert(ele.width === 2);
  }

}

我收到一个编译错误,说“非法继承;自我类型ElementSuite不符合org.scalatest.junit.JUnit3Suite的自我类型  org.scalatest.junit.JUnit3Suite“

任何想法??

注意我直接从Martin Oderskey的书中拿到了这个例子,所以它应该可以正常工作......

1 个答案:

答案 0 :(得分:1)

很难确切地说出问题是什么,不知道哪个版本的Scala, 您正在使用的SBT,Scalatest等,但这可以使用更新的版本。 而不是试图确定与旧的断开的确切位置 版本,我认为你可以更轻松地使用当前版本。

build.sbt:

resolvers ++= Seq(
  "Sonatype releases" at "https://oss.sonatype.org/content/repositories/releases"
  )
libraryDependencies += "org.scalactic" %% "scalactic" % "2.2.6"
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.6" % "test"

测试类:

import org.scalatest.FunSuite

// Random implementation because I'm not sure what Martin's elem class is.
case class elem( someField: Char, width: Int, height: Int )

class ElemSuite extends FunSuite {
  test("D") {
    val ele = elem('x', 2, 3)
      assert(ele.width === 2)
  }
}

我认为这是你最接近书中代码的匹配。但是,我喜欢在编写测试时使用FlatSpec和FeatureSpec以及Matchers:

import org.scalatest.{FlatSpec, Matchers}

class ElemSpec extends FlatSpec with Matchers
{
  it should "retrieve the correct width"  in {
    val ele = elem('x', 2, 3)
    ele.width shouldBe 2
  }
}

但是如果你是Scala的新手,你可能会更好地坚持这种风格 匹配这本书。

有关ScalaTest样式的更多信息:http://www.scalatest.org/user_guide/selecting_a_style

免责声明:我实际上正在使用最新的3.0.0候选版本,但是我 认为这些简单的测试仍然可以使用2.2.6。