标签: scalatest

你可以在scala中测试嵌套函数吗?

有没有办法测试嵌套函数(理想情况下使用ScalaTest)?

例如,有没有办法g()在下面的代码中测试:

def f() = {
  def g() = "a string!"
  g() + "– says g"
}
Run Code Online (Sandbox Code Playgroud)

testing scala scalatest

10
推荐指数
1
解决办法
2390
查看次数

具有多个测试用例的Scalatest或specs2

在TestNg和Java中,我们可以使用DataProvider运行多个测试用例,这可以作为单独的测试运行,这意味着测试的执行不会在失败时停止.是否有ScalaTest或Specs/Specs2的模拟?

scala scalatest specs2

10
推荐指数
2
解决办法
7143
查看次数

将期货传递给whenReady失败

我正在尝试用期货编写一个规范,我不确定我应该如何使用这个Futures特性.我必须传递whenReady一个FutureConcept,但我找不到我应该如何构建一个Future.文件内容如下:

为了使whenReady更广泛适用,它接受的未来类型是FutureConcept [T],其中T是未来承诺的价值类型.将future传递给whenReady需要从您希望传递的未来类型(建模类型)到FutureConcept [T]的隐式转换.

据我所知,我必须在a Future和a 之间写一个隐式转换FutureConcept(这对我来说似乎不对,因为它似乎应该是样板文件,但它是我唯一可以做到的).我无法弄清楚如何做到这一点,FutureConcept的文档很方便地告诉我

有关此特征为期货测试提供的语法的详细信息,请参阅特征期货的文档.

让我走完整圈.我做的最简单的例子是

import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global

import org.scalatest.WordSpecLike
import org.scalatest.concurrent._

class FutureSpec extends WordSpecLike with Futures {
  "A future" must {
    "be a valid argument for whenReady" in {
      val fut = future { 42 }
      whenReady(fut) { res => s should be 42 }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

那不编译

  • 类型不匹配; 发现:scala.concurrent.Future [Int] required:FutureSpec.this.FutureConcept [?]
  • ';' 预期,但发现整数字面量.

我应该做些什么呢?

unit-testing scala future scalatest

10
推荐指数
1
解决办法
5331
查看次数

如何测试在Scala中创建的Akka actor

我正在尝试编写一个测试,以验证我的演员下面是创建heartBeatExpireWorker和heartBeatAccepter,但我不知道该怎么做.

首先,我想我可以使用Mockhito模拟或间谍代替上下文然后验证我调用了actorOf,但我无法找到一种方法来注入上下文而不破坏Akka测试框架.

然后,我想我可以向工人发送识别信息以验证它们是否存在.但是我发现这不起作用,因为Akka TestKit似乎没有创建被测试演员的儿童演员.它只能接受可以代表相邻参与者的Testprobes.

class HeartBeatPumpWorker(chatService: ChatService, target: HeartBeatMessageCmd) extends Actor with ActorLogging with
WorkersReference {

  val heartBeatInterval = chatService.getHeartBeatInterval

  val tick = context.system.scheduler.schedule(0 millis, heartBeatInterval millis, self, SendHeartBeat(target))

  override def postStop() = tick.cancel()

  def receive = {
    case SendHeartBeat(command: HeartBeatMessageCmd) =>
      log.debug("Sending heartbeat")
      //Send heartbeat to GWT
      val userTarget = NetworkWorker.buildEventUserTarget(command.getEventCode, command.getUser)

      val uuid: String = UUID.randomUUID().toString
      val freshCommand = new HeartBeatMessageCmd(command.getUser, command.getEventCode, uuid, command.getUserSession)
      networkWorker ! NetworkBroadcast(userTarget, freshCommand)

      val heartBeatId: String = freshCommand.getUuid
      //create expirer
      val heartBeatExpireWorkerRef = …
Run Code Online (Sandbox Code Playgroud)

scala akka scalatest testkit

10
推荐指数
2
解决办法
3095
查看次数

Play应用中的specs/scalatest交互问题

我遇到了一个我无法解释的问题......在https://github.com/betehess/play-scalatest的项目中它是孤立的.

当我运行时test,sbt卡住一段时间然后抛出此异常:

> test
[error] Uncaught exception when running tests: java.net.ConnectException: Connection timed out
Exception in thread "Thread-1" java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2293)
    at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2473)
    at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2543)
    at java.io.ObjectInputStream$BlockDataInputStream.skipBlockData(ObjectInputStream.java:2445)
    at java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1941)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:500)
    at java.lang.Throwable.readObject(Throwable.java:914)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) …
Run Code Online (Sandbox Code Playgroud)

scala sbt scalatest playframework specs2

10
推荐指数
1
解决办法
788
查看次数

如何在两个列表中使用ScalaTest"包含allOf"?

我正在寻找一个ScalaTest匹配器来检查列表是否包含所有需要的元素(在另一个列表中给出),但也可能是其他元素.

contain allOf 要求获得两个固定元素,由于某种原因,其余的作为varargs.

我可以做这样的解决方法,但它非常难看:

val list = List(1,2,3,4)
val wanted = List(1,2,3)
list should contain allOf ( wanted.head, wanted.tail.head, wanted.tail.tail  :_* )    // ugly workaround
Run Code Online (Sandbox Code Playgroud)

为了给列表作为匹配,有contain theSameElementsAs.但是,它不允许无关元素出现在探测值中(我认为).

所以:

  • 我错过了什么吗?
  • 为什么allOf声明必须在前面给出两个固定元素(即为什么不通过varargs?)
  • 应该有theSameElementsAndMaybeMoreThan方法(可能有更好的名字)?

我试过的一些代码:

val list = List.empty[String]
//list should contain allOf("a")         // does not compile
list should contain allOf("a","b")
list should contain allOf("a","b","c")

val wanted = List("a","b","c")
//list should contain allOf( wanted )    // does not compile
list should contain allOf( wanted.head, wanted.tail ) …
Run Code Online (Sandbox Code Playgroud)

scala scalatest

10
推荐指数
1
解决办法
2999
查看次数

ScalaTest和Maven:开始吧

我有一个我已经工作多年的Maven/Java项目,我想接受JavaPosse的建议并开始在Scala中编写我的测试.我在ScalaTest的JUnit4快速启动后编写了一些测试,现在我希望在运行"mvn test"时执行这些测试.我该怎么做?我应该在pom.xml中添加什么来允许src/test/scala中的测试并行运行我的旧JUnit4测试?

干杯

PS,是的,我一直在谷歌搜索,但我能找到的关于这个主题的一些前v1.0建议,我没有得到工作

PPS,红利问题:我如何通过在Eclipse/STS中右键单击它们,然后说"Debug As ... ScalaTest"或类似的东西,我到目前为止所说的"调试为..."一次一个地运行这些测试. .JUnit测试"?

PPPS,我预计自2009年7月以来答案已经改变了?

testing maven-2 scala junit4 scalatest

9
推荐指数
1
解决办法
4597
查看次数

如何显示ScalaTest中给定和预期的差异?

如果您匹配列表或地图或任何其他复杂结构,那么查看给定内容与预期内容之间的差异非常有用.例如:

Map("a" -> 1, "b" -> 2, "c" -> 3) should equal Map("a" -> 1, "b" -> 5, "c" -> 3)

// ScalaTest output:
[info] Map("a" -> 1, "b" -> 2, "c" -> 3) did not equal Map("a" -> 1, "b" -> 5, "c" -> 3) (Test.scala)
[info]   org.scalatest.exceptions.TestFailedException:
[info]   ...
Run Code Online (Sandbox Code Playgroud)

您必须手动浏览两个地图才能找到它们之间的差异,您的收藏越大,它就越难.

另一方面,在RSpec中你会得到:

expect({a: 1, b: 2, c: 3}).to match({a: 1, b: 5, c: 3})

// RSpec output:
 Failure/Error: it { expect({a: 1, b: 2, c: 3}).to match({a: 1, b: …
Run Code Online (Sandbox Code Playgroud)

rspec scala scalatest

9
推荐指数
1
解决办法
1013
查看次数

Scalatest和Spark给出"java.io.NotSerializableException:org.scalatest.Assertions $ AssertionsHelper"

我正在" com.holdenkarau.spark-testing-base "和scalatest的帮助下测试Spark Streaming应用程序.

import com.holdenkarau.spark.testing.StreamingSuiteBase
import org.apache.spark.rdd.RDD
import org.scalatest.{ BeforeAndAfter, FunSuite }

class Test extends FunSuite with BeforeAndAfter with StreamingSuiteBase {

  var delim: String = ","

  before {
    System.clearProperty("spark.driver.port")
   }

  test(“This Fails“) {

    val source = scala.io.Source.fromURL(getClass.getResource(“/some_logs.csv"))
    val input = source.getLines.toList

    val rowRDDOut = Calculator.do(sc.parallelize(input))   //Returns DataFrame

    val report: RDD[String] = rowRDDOut.map(row => new String(row.getAs[String](0) + delim + row.getAs[String](1))

    source.close
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到字段' delim '的序列化异常:

org.apache.spark.SparkException: Task not serializable
[info]   at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:304)
[info]   at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:294)
[info]   at …
Run Code Online (Sandbox Code Playgroud)

serialization scala scalatest apache-spark rdd

9
推荐指数
1
解决办法
2303
查看次数

使用ScalaTest的Selenium DSL发生奇怪的超时

我正在用ScalaTest的Selenium DSL编写Selenium测试,我遇到了无法解释的超时问题.为了使问题更复杂,它们似乎只是在某些时候发生.

每当我在页面加载或一些Javascript渲染后访问元素时,就会出现问题.它看起来像这样:

click on "editEmployee"
eventually {
  textField(name("firstName")).value = "Steve"
}
Run Code Online (Sandbox Code Playgroud)

我的PatienceConfig配置如下:

override implicit val patienceConfig: PatienceConfig =
    PatienceConfig(timeout = Span(5, Seconds), interval = Span(50, Millis))
Run Code Online (Sandbox Code Playgroud)

测试失败,出现以下错误:

- should not display the old data after an employee was edited *** FAILED ***
  The code passed to eventually never returned normally. Attempted 1 times over 10.023253653000001 seconds.
  Last failure message: WebElement 'firstName' not found.. (EditOwnerTest.scala:24)
Run Code Online (Sandbox Code Playgroud)

有意义的是它没有立即成功,因为click导致某些渲染,并且文本字段可能不会立即可用.但是,尝试找到它不应该花费10秒钟,对吗?

此外,我发现非常有趣的是,最终块只尝试了一次,而且几乎只需要10秒钟.这闻起来像某个地方发生了超时,而且不是我的PatienceConfig,因为它被设置为在5秒后超时.

通过此解决方法,它确实有效:

click on "editEmployee"
eventually {
  find(name("firstName")).value // from ScalaTest's `OptionValues` …
Run Code Online (Sandbox Code Playgroud)

selenium scala scalatest

9
推荐指数
1
解决办法
542
查看次数