我有以下specs2测试:
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
}考试的内容对我的问题很不重要,但我有两个问题。首先要注意的是我不得不用
pairLongToDuration(3, SECONDS)我想要能够使用
3.seconds (from the scala.concurrent.duration package)但是,当我这样做时,我会得到以下错误:
[error] found : org.specs2.time.Duration
[error] required: scala.concurrent.duration.FiniteDuration知道我怎么才能避开这一切吗?
也要注意到我必须坚持
1 mustEqual 1在底部。如果我把这个拿出来,我就会
[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
发布于 2014-06-22 13:28:36
在持续时间问题上,您需要混合org.specs2.time.NoTimeConversions特性。
然后,您可以为AsResult[UpdateAddrToken]类型创建一个隐式实例:
implicit def tokenAsResult = new AsResult[UpdateAddrToken] {
def asResult(r: =>UpdateAddrToken) = success
}https://stackoverflow.com/questions/24351333
复制相似问题