scala中的单元测试[关闭]
Posted
技术标签:
【中文标题】scala中的单元测试[关闭]【英文标题】:Unit test in scala [closed] 【发布时间】:2018-11-27 06:30:47 【问题描述】:class HttpUtils
def get(userId: String, organization: String, url: String) =
Logger.debug("Request - GET :: " + url)
val wsClient = AhcWSClient()
wsClient.url(url).withHttpHeaders("userId"-> userId,"organization"-> organization).get()
.andThen case _ => wsClient.close()
.andThen case _ => system.terminate()
class MetamodelClient @Inject() (httpUtils: HttpUtils)(隐式 defaultExecutionContext: ExecutionContext)
隐式验证格式 = org.json4s.DefaultFormats
def getDBDetails(userId: String, organization: String, metamodelUrl: String, model: String) = httpUtils.get(userId, organization, metamodelUrl + "/models/" + model + "/modelsets").map 回复 => 响应状态匹配 case Status.OK => parse(resp.body).extract[List[DatabaseDetails]] case _ => handleError(resp.status)
无法为 getDBDetails 方法编写测试用例程序。谁能帮帮我。
【问题讨论】:
【参考方案1】:您应该考虑为什么要为此代码编写测试,这将有助于指导您如何。
参见例如https://dzone.com/articles/top-8-benefits-of-unit-testing
这里有许多问题使测试变得如此困难:
-
该方法对“
get()
”的结果不做任何事情
如果不涉及远程系统,则无法验证此处的请求是否正确。我们希望显示的 get
调用是正确的,但是如果不连接到远程 API 并尝试它,就无法测试它是否符合您的期望。这超出了单元测试的范围。
该方法有很大的副作用,包括关闭 ActorSystem
该方法与AhcWSClient
类紧密耦合
我会考虑注入一个 WS 客户端工厂来修复 (4)。
我会考虑重构您的关闭过程以将其与应用程序逻辑分开,以修复 (3)。
我不会测试这段代码,因为 (1) & (2)。没有办法通过单元测试来验证它是否正确。
如果您确实坚持对此进行测试,也许是因为您强制执行了不灵活的 100% 覆盖政策,我会做更多类似的事情:
class SomethingFetcher(clientFactory: () => AhcWSClient, somethingApiUrl: String)
def get(userId: String, organization: String): Something =
val wsClient = AhcWSClient()
wsClient.url(url).withHttpHeaders("userId"-> userId,"organization"-> organization).get()
.andThen case _ => wsClient.close()
...
class SomethingFetcherSpec
"SomethingFetcher" should "invoke GET on the specified URL" in
// arrange
val mockWsClient = ... // this will be a bit fiddly
val wsClientFactory = () => mockWsClient
val fetcher = SomethingFetcher(wsClientFactory, "http://example.com/something")
// act
val ignored = fetcher.get("test uid", "test oid")
// assert
verify(mockWsClient).get("http://example.com/something")
【讨论】:
以上是关于scala中的单元测试[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Scala - 为使用数据库连接扩展特征/类的对象/单例编写单元测试