gpt4 book ai didi

scala - 如何在 Scala 测试中模拟 Dispatch http 客户端?

转载 作者:行者123 更新时间:2023-12-01 23:30:50 24 4
gpt4 key购买 nike

我有一些处理 HTTP 请求的代码,我想对其进行单元测试。
因此,我尝试使用 Scala (2.9.1.final)、Mockito (1.9.0) 来模拟 dispatch.Http 甚至更好的 dispatch.HttpExecutor (0.8.5) -rc1) 和 ScalaTest (1.6.1),但甚至无法使我的测试代码可编译。
在 MyHttpTest 中,我希望接收任何 HTTP 请求的特定 HTTP 响应:

import org.scalatest.FunSuite
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito.when
import org.mockito.Matchers.any
import dispatch._

class MyHttpTest extends FunSuite with MockitoSugar {
test("example") {
val httpMock = mock[HttpExecutor]
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_HTTP_response")
}
}

但是它会产生编译错误:

error: overloaded method value thenReturn with alternatives:
(httpMock.HttpPackage[String],<repeated...>[httpMock.HttpPackage[String]])org.mockito.stubbing.OngoingStubbing[httpMock.HttpPackage[String]] <and>
(httpMock.HttpPackage[String])org.mockito.stubbing.OngoingStubbing[httpMock.HttpPackage[String]]
cannot be applied to (java.lang.String)
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_response")

那么如何模拟调度客户端呢?

最佳答案

我本来打算回答这个问题并建议您尝试 ScalaMock而不是 Mockito,因为我错误地认为您遇到的问题是由 Mockito 没有真正理解 Scala 引起的(而 ScalaMock 是从头开始在 Scala 中创建的)。但是:

  1. 这不是你的问题,并且
  2. 事实证明,ScalaMock 在尝试模拟 HttpExecutor 时失败,因为它不知道如何处理包对象 (ExceptionListener) 中定义的类型。该死!我会尽快修复它 - 感谢您提请我注意。

无论如何,您无法创建 HttpExecutor#HttpPackage 的实例,因为它是抽象类型。因此,要解决这个问题,您需要扩展 HttpExecutor 并使 HttpPackage 具体化。例如:

class MyHttpTest extends FunSuite with MockitoSugar {
trait TestHttpExecutor extends HttpExecutor {
type HttpPackage[T] = T
}
test("example") {
val httpMock = mock[TestHttpExecutor]
when(httpMock.apply(any(classOf[Handler[String]]))).thenReturn("Some_HTTP_response")
}
}

关于scala - 如何在 Scala 测试中模拟 Dispatch http 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com