如何测试喷雾服务
How to test a spray service
查看文档似乎可以接受的做法是应在特征中定义喷雾路线,例如
trait MyService extends HttpService {
val route = ...
}
有一些使用 Specs2RouteTest 的很好的集成测试示例,但它们似乎都触发请求并对响应执行断言。但是我如何验证该路由是否按预期与其他协作者通信?据我了解,我无法通过构造函数传递协作者,因为我正在测试特征
您可以改为将这些协作者作为特征字段传递。您还可以使用您喜欢的一些服务定位器机制 - 查找您的服务的东西。
基本上你的问题是关于依赖注入 DI 并且可能在测试中模拟这些依赖。
我使用 Spray 的方法是使用 Cake 模式将这些依赖项定义为特征字段,当您将蛋糕放在最后一层时 overrides/provides 这些依赖项。
看看这个例子:https://github.com/izmailoff/Spray_Mongo_REST_service
这是一个使用那个蛋糕的测试:
https://github.com/izmailoff/Spray_Mongo_REST_service/blob/master/rest/src/test/scala/com/example/service/GetTweetSpec.scala
这是帮助程序 class 将蛋糕与模拟数据库放在一起进行测试:
https://github.com/izmailoff/Spray_Mongo_REST_service/blob/master/rest/src/test/scala/com/example/test/utils/db/ServiceTestContext.scala
这里是 non-test/prod 的文件,它们组成了蛋糕:
https://github.com/izmailoff/Spray_Mongo_REST_service/tree/master/rest/src/main/scala/com/example/service
它可能需要一些清理,但你可以理解这个想法。
查看文档似乎可以接受的做法是应在特征中定义喷雾路线,例如
trait MyService extends HttpService {
val route = ...
}
有一些使用 Specs2RouteTest 的很好的集成测试示例,但它们似乎都触发请求并对响应执行断言。但是我如何验证该路由是否按预期与其他协作者通信?据我了解,我无法通过构造函数传递协作者,因为我正在测试特征
您可以改为将这些协作者作为特征字段传递。您还可以使用您喜欢的一些服务定位器机制 - 查找您的服务的东西。
基本上你的问题是关于依赖注入 DI 并且可能在测试中模拟这些依赖。
我使用 Spray 的方法是使用 Cake 模式将这些依赖项定义为特征字段,当您将蛋糕放在最后一层时 overrides/provides 这些依赖项。
看看这个例子:https://github.com/izmailoff/Spray_Mongo_REST_service
这是一个使用那个蛋糕的测试: https://github.com/izmailoff/Spray_Mongo_REST_service/blob/master/rest/src/test/scala/com/example/service/GetTweetSpec.scala
这是帮助程序 class 将蛋糕与模拟数据库放在一起进行测试: https://github.com/izmailoff/Spray_Mongo_REST_service/blob/master/rest/src/test/scala/com/example/test/utils/db/ServiceTestContext.scala
这里是 non-test/prod 的文件,它们组成了蛋糕: https://github.com/izmailoff/Spray_Mongo_REST_service/tree/master/rest/src/main/scala/com/example/service
它可能需要一些清理,但你可以理解这个想法。