首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala,PlayFramework,Mockito,ExecutionContext null

Scala,PlayFramework,Mockito,ExecutionContext null
EN

Stack Overflow用户
提问于 2016-05-01 20:40:49
回答 1查看 1.3K关注 0票数 3

下面的答案是:https://stackoverflow.com/a/30806548/4496364,我在我的项目中使用了Play的ExecutionContext。

最近,我需要使用Mockito来测试游戏中的一些服务。因此,这是它的简化版本:

代码语言:javascript
复制
import scala.concurrent.{ Future, ExecutionContext }
import play.api.libs.concurrent.Execution.Implicits.defaultContext

case class Model(id: Int, name: String)

trait DAO {
  def findAll(implicit ec: ExecutionContext): Future[List[Model]]
}

class Service(dao: DAO) {
  def findAll: Future[List[Model]] = dao.findAll
}

测试:

代码语言:javascript
复制
import play.api.libs.concurrent.Execution.Implicits.defaultContext
// doesn't work when different ExecutionContext
// import scala.concurrent.ExecutionContext.Implicits.global


class FuturesTest extends PlaySpec with MockitoSugar with ScalaFutures {

  "Service" should {
    "return all future data" in {
      val mockModel = Model(1, "name")
      val mockDAO = mock[DAO]
      when(mockDAO.findAll) thenReturn Future.successful(List(mockModel))

      val service = new Service(mockDAO)
      val futureData = service.findAll
      whenReady(futureData) { data =>
        data.map(_.name) must contain(mockModel.name)
      }
    }
  }

}

注意测试中的注释,在调用NullPointException时,在Service中调用dao.findAll时会得到一个Service。起初,我认为Mockito无法处理Scala的未来,但我发现ExecutionContext是问题所在。既然我不是并发专家,能不能有人解释一下为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-03 14:15:03

如果有人在找答案很明显..。

代码语言:javascript
复制
import org.mockito.Matchers.any
..
mockDAO.findAll(any[ExecutionContext])

我不熟悉Mockito是如何工作的,也不熟悉Scala的暗示。当您没有通过any[ExecutionContext]时,Scala将用测试中的隐式方法填充它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36971704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档