如何在Scala测试中模拟Dispatch http客户端?
发布时间:2020-12-16 09:56:33 所属栏目:安全 来源:网络整理
导读:我有一些处理HTTP请求的代码,我想对它进行单元测试. 因此,我正在尝试模拟dispatch.Http甚至更好的dispatch.HttpExecutor(0.8.5)与 Scala(2.9.1.final),Mockito(1.9.0-rc1)和ScalaTest(1.6.1),但即使可以’让我的测试代码可编辑. 在MyHttpTest中,我希望收到任
我有一些处理HTTP请求的代码,我想对它进行单元测试.
因此,我正在尝试模拟dispatch.Http甚至更好的dispatch.HttpExecutor(0.8.5)与 Scala(2.9.1.final),Mockito(1.9.0-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中创建的).然而:
>那不是你的问题,而且 无论如何,你不能创建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") } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |