更改build.sbt以使ScalaTest测试能够与Scala Play一起运行
我正在关注文档
here,这似乎根本不起作用;但我甚至不确定我在这里做错了什么.
首先,只需在项目/ Build.scala文件中添加给定的片段就会导致编译错误;所以这不是一个开始. 最后,我在build.sbt中添加了以下内容 libraryDependencies ++= Seq( "org.scalatestplus" %% "play" % "1.0.0" % "test",... 这稍微好一点,但在IntelliJ中,我的ApplicationSpec有各种编译错误: import org.scalatestplus.play._ import scala.collection.mutable.Stack class ApplicationSpec extends PlaySpec { "A Stack" must { "pop values in last-in-first-out order" in { val stack = new Stack[Int] stack.push(1) stack.push(2) stack.pop() mustBe 2 stack.pop() mustBe 1 } "throw NoSuchElementException if an empty stack is popped" in { val emptyStack = new Stack[Int] a [NoSuchElementException] must be thrownBy { emptyStack.pop() } } } } 必须,mustBe和a不被承认. sentinel/test:definedTests java.lang.NoSuchMethodError: org.specs2.runner.Fingerprints$.fp1()Lorg/specs2/runner/SpecificationFingerprint; at org.specs2.runner.Specs2Framework.fingerprints(SbtRunner.scala:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at sbt.TestFramework$.getFingerprints(TestFramework.scala:113) at sbt.Tests$$anonfun$discover$1.apply(Tests.scala:242) at sbt.Tests$$anonfun$discover$1.apply(Tests.scala:242) at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) at scala.collection.immutable.List.foreach(List.scala:318) at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251) at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105) at sbt.Tests$.discover(Tests.scala:242) at sbt.Defaults$$anonfun$detectTests$1.apply(Defaults.scala:556) ... [error] (sentinel/test:definedTests) java.lang.reflect.InvocationTargetException 从本质上讲,一个史诗般的失败 – 如果文档在需要什么以及对所有机器的工作有什么期望时更加具体,那将是很好的:事实上,解决这些混乱有点困难. 我今天一直在谷歌上搜索堆栈溢出几个小时,看看ScalaTestPlus文档(好吧,它的整个两段……)并尝试了很多变化,都无济于事. full project’s code is on github. 值得注意的是,如果我屈服于“糟糕的文档”并且我使用Specs2,那么测试运行正确(至少从Intellij内部,并且就’hello world’示例而言). 我仍然更喜欢使用ScalaTest(真的不明白为什么我需要学习两个测试框架,真的) – 所以,任何帮助将不胜感激. 解决方法
最后,事实证明它确实是一个库版本不匹配,但我没有预料到.
它围绕这样一个事实,即我的sbt构建中有一个子项目,它运行得很好,但是导入了ScalaTest 2.2.1,而我使用2.1.7使其与ScalaTest 1.1.0一起使用 – 但是,使用ScalaTest 2.1.7(确实适用于ST 1.1.0)仅适用于“顶级”项目,导致抽象类等周围的怪异. Versions,Versions,Versions页面现已由Bill更新,修复方法是使用ScalaTest 2.2.1,ScalaTestPlus 1.2.0和Play 2.3.0 – 这些都可以很好地协同工作. 更新 – 以上仍然导致测试失败通过sbt / activator测试,我只能通过IntelliJ运行测试:修复已经更新build.sbt使用Scala 2.11 最后,为了使这项工作,这就是我在build.sbt中所拥有的: name := "sentinel" version := "0.2-SNAPSHOT" organization := "AlertAvert.com" scalacOptions ++= Seq("-deprecation","-feature","-language:postfixOps") // The REST project depends on Core Sentinel classes lazy val sentinel_core = project lazy val sentinel = (project in file(".")) .enablePlugins(PlayScala) .aggregate(sentinel_core) .dependsOn(sentinel_core) scalaVersion := "2.11.1" libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "2.2.1" % "test","org.scalatestplus" %% "play" % "1.2.0" % "test",cache ) (我正在完整地复制它,所以如果其他人有同样的问题,他们会看到它 – 当人们只粘贴一个片段而一些关键要素被省略时,它激怒了我:) Bill Venners获得帮助和指导的主要信用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |