首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Specs2测试Akka

用Specs2测试Akka
EN

Stack Overflow用户
提问于 2014-06-22 12:41:17
回答 1查看 1K关注 0票数 2

我有以下specs2测试:

代码语言:javascript
复制
package concurrent

import akka.actor.{Props, actorRef2Scala}
import akka.testkit.TestActorRef

import scala.concurrent.duration._

class MessageCoordinatingActorSpec extends ActorBaseSpec {

  "MessageCoordinatingActor" should {
    "receive a Result and update the related token and status" in {
      val (repositoryActorProbe, messageCoordinatingActorRef) = buildMockMessageCoordinatingActor


      val addresses = MockSession.getTestAddressesWithServicesAt(
                                   "16 Main Street", List("Service1", "Service2"))
      val postCode = Postcode("NE28 9QR", addresses)

      val matchedAddr = addresses.find(_.addrToken=="16 Main Street")


      messageCoordinatingActorRef ! Result(LookupResult(
        LookupStatus.ServicesAvailable, postCode, matchedAddr, true), testRecord)

      //Expect message to persist the virgin postcode record
      repositoryActorProbe.expectMsg(pairLongToDuration(3, SECONDS),
        PersistPostcode(postCode))

      1 mustEqual 1
    }
  }
}

abstract class ActorBaseSpec extends TestKit(ActorSystem("test")) with ImplicitSender with MustMatchers with SpecificationLike with Mockito {
    //This class just contains some fixture factory methods 
    //such as buildMockMessageCoordinatingActor
}

考试的内容对我的问题很不重要,但我有两个问题。首先要注意的是我不得不用

代码语言:javascript
复制
pairLongToDuration(3, SECONDS)

我想要能够使用

代码语言:javascript
复制
3.seconds (from the scala.concurrent.duration package)

但是,当我这样做时,我会得到以下错误:

代码语言:javascript
复制
[error]  found   : org.specs2.time.Duration
[error]  required: scala.concurrent.duration.FiniteDuration

知道我怎么才能避开这一切吗?

也要注意到我必须坚持

代码语言:javascript
复制
1 mustEqual 1

在底部。如果我把这个拿出来,我就会

代码语言:javascript
复制
[error] /Users/.../MessageCoordinatingActorSpec.scala:18: could not find implicit value for evidence parameter of type org.specs2.execute.AsResult[concurrent.RepositoryActor.UpdateAddrToken]

specs2似乎没有认识到probe.expectMsg的成功是一种测试成功,有什么方法可以用更令人满意的方式来解决这个问题吗?

干杯!NFV

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 13:28:36

在持续时间问题上,您需要混合org.specs2.time.NoTimeConversions特性。

然后,您可以为AsResult[UpdateAddrToken]类型创建一个隐式实例:

代码语言:javascript
复制
implicit def tokenAsResult = new AsResult[UpdateAddrToken] {
  def asResult(r: =>UpdateAddrToken) = success
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24351333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档