我正在尝试对以下的couchbase方法调用进行单元测试,我在SO中找不到满意的样本,所以我想我会发一个问题....
def getUserSession(token: String, ipAddr: String, userAgent: Option[String]): Future[Option[UserSession]] = {
val query = new Query().setIncludeDocs(true).setLimit(1)
.setRangeStart(ComplexKey.of(token))
.setRangeEnd(ComplexKey.of(s"$token\uefff"))
.setStale(Stale.FALSE)
bucket.find[UserSession](DOC_NAME, VIEW_BY_TOKEN)(query).map(_.headOption) map {
userSessionOpt => {
userSessionOpt filter {
userSession =>
(userSession.ipAddr == ipAddr) &&
(!userAgent.isDefined || !userSession.userAgent.isDefined || userSession.userAgent == userAgent)
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
所以这是我的尝试,我的单元测试摘录:
val mockQueryResult = mock[Future[List[UserSession]]]
val mockUserSessionList = mock[List[UserSession]]
val mockUserSession = mock[UserSession]
// This is just my trial and erros
mockUserSessionList.head returns mockUserSession
mockUserSessionList(0) returns mockUserSession
Await.result(mockQueryResult, Duration(60, SECONDS)) returns mockUserSessionList
mockBucket.find[UserSession](any[String], any[String])(any[Query])(any[Reads[UserSession]], …Run Code Online (Sandbox Code Playgroud)