2015-11-26 41 views
1

我已经使用简单的sbt构建了一个简单的Spec2测试项目。Specs2无法使用sbt找到我的测试

package main.specs 

import org.specs2._ 

class QuickStartSpec extends Specification { 
    def is = s2""" 
    This is my first specification 
    it is working     $ok 
    really working!    $ok 
          """ 
} 

这里是我的build.sbt文件:

name := "QuickStartSpec" 

version := "1.0" 

scalaVersion := "2.10.1" 

libraryDependencies ++= Seq("org.specs2" %% "specs2-core" % "3.6.5" % "test") 

scalacOptions in Test ++= Seq("-Yrangepos") 

但是当我在SBT运行此命令

testOnly main.specs.QuickStartSpec 

我得到这个:

[info] Updating {file:/Users/nabajeet/workspace/SpecsTest/}specstest... 
[info] Resolving org.fusesource.jansi#jansi;1.4 ... 
[info] Done updating. 
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0 
[info] No tests to run for test:testOnly 

我正在关注这个页面来创建示例: https://etorreborre.github.io/specs2/website/SPECS2-3.6.5/quickstart.html

我无法弄清为什么我的测试没有被检测到。

我SBT版本0.13.8

+0

你能为你的项目提供目录和文件布局吗?我怀疑测试不在正确的位置。在一个vanilla sbt项目中,'QuickStartSpec.scala'应该在'/ Users/nabajeet/workspace/SpecsTest/src/test/scala/main/specs/QuickStartSpec.scala'中(它可以位于'/ Users/nabajeet/workspace/SpecsTest/src/test/scala /'作为包名不必在fs结构中表示) – Jean

+0

嘿,目录是 – Naba

+0

/Users/nabajeet/workspace/SpecsTest/src/main/specs/quickStartSpec.scala – Naba

回答

1

通过声明

libraryDependencies ++= Seq("org.specs2" %% "specs2-core" % "3.6.5" % "test") 

你限制specs2只类测试源目录范围。你将无法引用在生产代码specs2类(所有的src/main/下的代码)

在您的评论表示您放置在您的规格在/Users/nabajeet/workspace/SpecsTest/src/main/specs/quickStartSpec.scala

试试你的文件移动到/用户/ nabajeet /工作区/ SpecsTest/src目录/ 测试/斯卡拉 /specs/quickStartSpec.scala

不正确的位置就是为什么你不规范的SBT拿起(我有信心地说,它没有任何编译) 。

默认情况下,SBT适用于maven的standard directory layout,为scala代码添加src/main/scala/src/test/scala/。这是在SBT tutorial

记录我刚刚创建了一个项目具有以下布局

. 
./built.sbt 
./src 
./src/test 
./src/test/scala 
./src/test/scala/QuickStartSpec.scala 

build.sbt包含

name := "QuickStartSpec" 

version := "1.0" 

scalaVersion := "2.11.4" 

libraryDependencies ++= Seq("org.specs2" %% "specs2-core" % "3.6.5" % "test") 

scalacOptions in Test ++= Seq("-Yrangepos") 

和QuickStartSpec.scala包含

package main.specs 

import org.specs2._ 

class QuickStartSpec extends Specification { 
    def is = s2""" 
    This is my first specification 
    it is working     $ok 
    really working!    $ok 
          """ 
} 

这里是我得到的sbt输出

sbt 
[info] Set current project to QuickStartSpec (in build file:/tmp/stack/) 
> test:compile 
[info] Updating {file:/tmp/stack/}stack... 
[info] Resolving jline#jline;2.12 ... 
[info] Done updating. 
[info] Compiling 1 Scala source to /tmp/stack/target/scala-2.11/test-classes... 
[info] 'compiler-interface' not yet compiled for Scala 2.11.4. Compiling... 
[info] Compilation completed in 6.372 s 
[success] Total time: 9 s, completed 27 nov. 2015 06:38:26 
> test 
[info] QuickStartSpec 
[info]  + This is my first specification 
[info]  it is working 
[info]  + really working! 
[info] 
[info] Total for specification QuickStartSpec 
[info] Finished in 17 ms 
[info] 2 examples, 0 failure, 0 error 
[info] 
[info] Passed: Total 2, Failed 0, Errors 0, Passed 2 
[success] Total time: 1 s, completed 27 nov. 2015 06:38:31 
> 
+0

谢谢,@Jean,但现在我得到编译错误!宏扩展期间出现[error]异常: [error] java.lang.UnsupportedOperationException:Position.end on class scala.reflect.internal.util.OffsetPosition [error] \t at scala.reflect.internal.util.Position.end (Position.scala:126) [error] \t at org.specs2.specification.create.S2Macro $$ anonfun $ 2.apply(S2Macro.scala:29)' – Naba

+0

我试着将scala版本更改为2.11.4来解决这个问题在某些解决方案中提到的问题,但又使规格无法检测到测试! – Naba

+0

你现在能够让你的测试工作吗? – Jean