0

我有一个发出请求的函数,它以字节为单位获取响应并写入文件。下面给出部分功能。

val bytes = Http(url).timeout(connTimeout, readTimeout).method("GET").proxy(proxyUrl, proxyPort).asBytes.body
val dest = new File(filePath)
dest.createNewFile
val out = new FileOutputStream(destFile)
IOUtils.write(bytes, out)
IOUtils.closeQuitely(out)

我正在尝试对这个功能进行单元测试。我正在使用mockito并且Http是一个对象。所以,嘲笑它是不可能的。但另一方面HttpRequest,andHttpResponsecase类,可以被嘲笑。所以,我在测试中这样做了。

//Read bytes from test resource file
val bytes = Files.readAllBytes(Paths.get(testFile))

// Mock
val mockHttpReq = mock(classOf[HttpRequest])
val mocmHttpRes = mock(classOf[HttpResponse[Array[Byte]])
when(mockHttpReq.asBytes).thenReturn(mockHttpRes)
when(mockHttpRes.body).thenReturn(bytes)

现在,当我调用实际函数时,即 Http(url).timeout(connTimeout, readTimeout).method("GET").proxy(proxyUrl, proxyPort).asBytes.body实际调用时,我没有得到任何函数,Byte即它是空的。

我是 scala 和 mockito 的新手。我想我设置正确。如果我缺少任何东西,请指导我。

4

1 回答 1

-1

我认为你没有使用正确的工具来完成这项工作,模拟主要是为了模拟你自己的类,你应该尽量避免模拟第三方 API/类。

对于这个特定的问题,我建议对这个组件(我们称之为MyHttpClient)进行集成测试,使用类似wiremock 的东西作为你的假网络服务器。

一旦你完成了MyHttpClient测试,你就可以在任何其他你测试的组件依赖于它的测试中自由地模拟它。

于 2019-04-18T08:49:13.447 回答