通过文档看来,似乎可以接受的做法是喷雾路线应该用特征定义。
trait MyService extends HttpService {
val route = ...
}
使用Specs2RouteTest有一些很好的集成测试示例,但它们似乎都会触发请求并对响应执行断言。但是,我如何验证路线是否正在与其他合作者交谈?据我了解,我无法通过构造函数传递协作者,因为我正在测试特征
答案 0 :(得分:1)
您可以将这些协作者作为特征字段传递。您还可以使用您喜欢的某种服务定位器机制 - 查找您服务的内容。
基本上你的问题是关于依赖注入DI并且可能在测试中嘲笑那些依赖项。
我使用Spray的方法是使用Cake模式将这些依赖项定义为trait字段,当你将蛋糕放在一起时,最后一层覆盖/提供这些依赖项。
看看这个例子: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
这是帮助类,它将该蛋糕与模拟数据库放在一起进行测试: https://github.com/izmailoff/Spray_Mongo_REST_service/blob/master/rest/src/test/scala/com/example/test/utils/db/ServiceTestContext.scala
以下是将蛋糕放在一起的非测试/产品文件: https://github.com/izmailoff/Spray_Mongo_REST_service/tree/master/rest/src/main/scala/com/example/service
可能需要一些清理,但你可以掌握这个想法。