首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于Java测试,我应该模拟客户机还是模拟服务器

对于Java测试,我应该模拟客户机还是模拟服务器
EN

Stack Overflow用户
提问于 2018-10-06 19:29:35
回答 1查看 1.4K关注 0票数 3

在客户端-服务器架构中,什么时候应该模拟客户端,什么时候应该模拟服务器是最好的方法。我知道单元测试应该只测试给定的类,每个依赖对象都会被模拟,而集成测试应该作为一个整体来测试一个特性。当涉及到API调用时,我感到困惑的是,我是应该模拟用于api调用的客户端,还是应该使用一些服务器模拟框架,让真正的客户端调用模拟服务器。

我有一种情况,我应该(不是强制性的)测试我是否使用正确的方法和在查询参数或请求主体中传递的某些值命中了正确的API url。使用客户端模拟,我可以简单地“验证”是否传递了给定的参数(路径、方法、请求体),并认为测试成功。如果我要模拟服务器,那么我需要在模拟服务器上创建一些处理,以检查路径、方法和请求体是否被正确传递并返回值。在这种情况下,服务器响应是我唯一可以用来衡量测试是否成功的东西(如果没有收到所需的数据,则发送500 )。

根据您的经验,在集成测试的客户端-服务器架构中测试调用的正确方法是什么?如果我们照本宣科,那么应该使用服务器模拟,但这在上面提到的情况下实用吗?对于单元测试,显然应该使用mock。

更新:避免混淆:我正在制作一个依赖于我无法控制的公共可用服务的客户端。因此,我正在测试客户端是否正常工作,焦点是否在客户端上。问题是我应该(在集成测试中)模拟负责远程连接的客户端对象(在我的例子中是来自Play框架的WSClient ),还是应该使用一些服务器模拟(比如okhttp模拟web服务器)。

另一个更新:大多数人建议应该遵循简单的经验法则:如果这些是单元测试,则模拟客户端,如果这些是集成测试,则使用模拟服务器。现在,我对这种情况很好奇:我有一个依赖于类B的类A,而类B有一个负责远程调用的客户端对象。如果我要为A类编写单元测试,我应该模拟B类,这很好。然而,如果我正在为类A做集成测试,是否可以在类B中模拟客户端对象并“验证”是否向其传递了适当的参数(路径、方法和请求体),或者,为了完整性起见,我应该运行模拟服务器,即使模拟客户端对象更容易。在这种情况下,我不会测试超时和低级网络错误。或者,在这种情况下,集成测试的全部要点也应该是测试网络连通性。

EN

回答 1

Stack Overflow用户

发布于 2018-10-06 19:40:52

您需要:

  1. 集成测试-使用诸如Wiremock之类的存根服务器,测试超时、错误响应、500等真实场景。
  2. 测试您的客户端类-使用Mockito模拟服务器端点并验证response
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52678580

复制
相关文章

相似问题

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