如何配置sbt 0.10以将junitxml选项与specs2配合使用?
该specs2文档说,这是用SBT 0.7.x来做到这一点:
override def testOptions = super.testOptions ++ Seq(TestArgument("junitxml"))
如何在sbt 0.10中说同样的话?
我是一个全新的Scala程序员,我以前没有Java经验; 我来自红宝石.我正在尝试运行我的第一个TDD示例程序.我计划一些非常小的东西,可能有5或6个测试.我正在尝试使用specs2 lib.我没有IDE,我通常用vim编程并从命令行执行一些东西.
如何从命令行使用我的.scala文件中的scala和specs2?
在快速入门中,他们提到了这一点:
scala -cp ... specs2.run HelloWorldSpec
Run Code Online (Sandbox Code Playgroud)
...)代表什么.我该怎么办?specs2.run.但在下载部分我只得到一个.jar文件.在哪里specs2.run?非常感谢.
我试图在scala中使用specs2测试一些db相关的东西.目标是测试"db running"然后执行测试.我发现如果数据库关闭,我可以使用Matcher类中的orSkip.
问题是,我正在获得一个匹配条件的输出(作为PASSED)并且示例被标记为SKIPPED.我想要的是:只有在测试数据库脱机时才执行一个标记为"SKIPPED"的测试.这是我的"TestKit"的代码
package net.mycode.testkit
import org.specs2.mutable._
import net.mycode.{DB}
trait MyTestKit {
this: SpecificationWithJUnit =>
def debug = false
// Before example
step {
// Do something before
}
// Skip the example if DB is offline
def checkDbIsRunning = DB.isRunning() must be_==(true).orSkip
// After example
step {
// Do something after spec
}
}
Run Code Online (Sandbox Code Playgroud)
这里是我的规范的代码:
package net.mycode
import org.specs2.mutable._
import net.mycode.testkit.{TestKit}
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
@RunWith(classOf[JUnitRunner])
class MyClassSpec extends SpecificationWithJUnit with TestKit with Logging {
"MyClass" should {
"do …Run Code Online (Sandbox Code Playgroud) 假设我在"单元"样式中定义了specs2规范,如下所示:
import org.specs2.mutable
class MyClassSpec extends mutable.Specification {
"myMethod" should {
"return positive values" in {
MyClass.myMethod must beGreaterThan(0)
}
"return values less than 100" in {
MyClass.myMethod must beLessThan(100)
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以跳过/禁用/标记待定块/片段中的所有示例myMethod?
显然,我可以从块中的每个单独的示例调用pendingUntilFixed或返回pending,但对于具有许多规范的块而言,这将是相当繁琐的.
如果MyClass.myMethod难以实施并受到惩罚,这似乎是常见的事情.还有另一种方法,这通常在specs2中完成吗?
SBT使用specs2和spray-testkit在我的一些较大的验收风格测试中保持内存不足.我有10个演出或RAM可用,目前我开始SBT(使用SBT附加脚本),MaxPermSize为512m,Xms为1024m,Xmx为2g.
验收测试按特定顺序贯穿客户的整个业务流程,因此将验收测试分成多个较小的测试并不容易.
任何想法如何更好地配置我的环境,或者我应该注意的问题将不胜感激.
为了它的价值,我在Ubuntu下使用Oracle Java,该项目使用Scala 2.10,sbt 0.12.2,使用specs2 1.14喷涂1.1-M7.
在测试之外运行系统时,或者在使用较小的测试时,一切都像发条一样运行.只有在较大的测试中,事情才会变得坚果.
我测试期货的方式是使用value1.我迁移到了play2.2.我发现,我习惯的测试方法已经消失了.@ scala.deprecated("使用scala.concurrent.Promise代替.","2.2")
任何帮助将不胜感激.
奥利弗
在Play Framework中创建了一个Akka演员,我现在想测试一下.但是我马上遇到了一个问题:
任何人都可以使用TestKit和Play的测试装置提供测试Akka演员的典型示例吗?
为了保持一致性,我更喜欢使用Specs2(坦率地说,为单个应用程序要求两个不同的测试框架似乎很奇怪)但是如果它与Play测试装置很好地集成,我将接受ScalaTest示例.
如何Seq[String]在Scala中使用specs2 检查a 是否为空?我正在使用seq must be empty或seq.length must be greaterThan(0)但最终总是出现类型不匹配错误.
ret is Seq[String]
ret.length must be greaterThan(0)
[error] ApiTest.scala:99: type mismatch;
[error] found : Int
[error] required: org.specs2.matcher.Matcher[String]
[error] ret.length must be greaterThan(0)
Run Code Online (Sandbox Code Playgroud) 我想在Scala中使用Mockito(确切地说是Specs2)来存储返回AnyVal的函数,但是它不能正常工作:
import org.specs2.mutable._
import org.specs2.mock._
case class V(s: String) extends AnyVal
class A {
def f: V = new V("Hello")
}
class Sample extends Specification with Mockito {
"Mockito" should {
"mock A" in {
val a = mock[A]
a.f returns new V("hoge")
a.f match {
case V("hoge") => success
case _ => failure
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这失败了:
V cannot be returned by f()
f() should return String
Run Code Online (Sandbox Code Playgroud)
我使用标记接口/特征找到了一种解决方法(基于我在上面提供的代码片段):https: //gist.github.com/mtgto/9251779
但这对我来说不是任何解决方案,因此它会更改返回类型(因为模拟/测试库问题).
以前任何人都看过这个并且知道如何存根这样的功能?
当我通过SBT在Jenkins中运行我的Specs2测试时,一旦测试失败,构建就会被标记为失败.由于Jenkins通常区分构建失败和测试失败,我想改变这一点.
我知道Jenkins的构建失败是由对SBT的调用的退出代码检测到的,一旦至少一个测试失败,它就会返回1.
有什么选择我假设我想避免改变我build.sbt(或一般的项目)只是为了解决这个不便?
不知何故,我认为应该可以将标准的sbt项目放入标准的Jenkins安装中并使其按预期工作.