首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito mock HttpResponse[Array[Byte]]用于Scalaj-Http中的单元测试

Mockito mock HttpResponse[Array[Byte]]用于Scalaj-Http中的单元测试
EN

Stack Overflow用户
提问于 2019-04-18 10:54:46
回答 1查看 453关注 0票数 0

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

代码语言:javascript
复制
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是一个对象。所以,嘲笑它是不可能的。但另一方面,HttpRequestHttpResponsecase类,可以被模仿。所以,我在测试中这样做了。

代码语言:javascript
复制
//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的新手。我想我把所有东西都设置好了。如果我遗漏了什么,请指点我。

EN

回答 1

Stack Overflow用户

发布于 2019-04-18 16:49:13

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

对于这个特殊的问题,我建议对这个组件做一个集成测试(让我们称它为MyHttpClient),使用wiremock之类的东西作为您的假let服务器。

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

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

https://stackoverflow.com/questions/55738490

复制
相关文章

相似问题

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