我有一个用于检查Web服务的测试代码,一些继承的类引入HttpService
(不确定,哪一个),要求我定义actorRefFactory
引用在测试班内。
有更好的方法吗?
Scala 2.11.4,ScalaTest 2.2.1,Spray 1.3.2,Akka 2.3.6
class RestAPITest extends FlatSpec
with Matchers
with ScalatestRouteTest
with SprayJsonSupport
with MyRoute
{
// Without this, we get:
// <<
// Error:(48, 7) class RestAPITest needs to be abstract, since method actorRefFactory in trait HttpService of type => akka.actor.ActorRefFactory is not defined
// <<
//
def actorRefFactory: ActorSystem = system
...
答案 0 :(得分:1)
由于它基于Akka actor,因此喷雾需要actorSystem。喷雾的惯用测试机制是使用spray-testkit项目。
来自spray-testkit文档:
使用spray-testkit构建的测试的基本结构是这样的(全部大写的表达式占位符):
REQUEST ~> ROUTE ~> check {
ASSERTIONS
}
在此模板中,REQUEST是一个评估HttpRequest实例的表达式。由于两个RouteTest特性都扩展了spray-httpx Request Building特性,因此您可以访问其mini-DSL,以便于简洁的请求构建。
ROUTE是评估喷雾路线的表达式。您可以指定一个内联或只是引用服务中定义的路径结构。
〜&gt;的最后一个元素chain是一个检查调用,它将一个断言块作为参数。在此块中,您可以在处理完给定请求后,将您的需求定义为路径生成的结果。通常,您使用其中一个已定义的“检查器”来检索路由响应的特定元素,并使用测试框架提供的测试DSL表达对它的断言。例如,使用specs2,为了验证您的路由是否响应状态为200的响应的请求,您将使用状态检查器并表达如下断言:
status mustEqual 200
答案 1 :(得分:-3)
正如错误所说,你需要一个actorRefFactory让actor在HTTP服务中产生。所以请继续。