Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于Java测试,我应该模拟客户端还是模拟服务器_Java_Unit Testing_Mocking_Integration Testing - Fatal编程技术网

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

对于Java测试,我应该模拟客户端还是模拟服务器,java,unit-testing,mocking,integration-testing,Java,Unit Testing,Mocking,Integration Testing,在客户机-服务器体系结构中,当模拟客户机和模拟服务器时,最好的方法是什么。我理解单元测试应该只测试给定的类,每个依赖对象都被模拟,而集成测试应该测试整个特性。当谈到API调用时,我感到困惑的是,我应该模拟用于API调用的客户机,还是应该使用一些服务器模拟框架,让真正的客户机调用模拟服务器 在这种情况下,我应该(不是强制性的)测试我是否使用了正确的API url、正确的方法以及在查询参数或请求正文中传递的某些值。在客户端嘲笑的情况下,如果给定的参数(路径、方法、请求体)通过,并考虑测试成功,我可以

在客户机-服务器体系结构中,当模拟客户机和模拟服务器时,最好的方法是什么。我理解单元测试应该只测试给定的类,每个依赖对象都被模拟,而集成测试应该测试整个特性。当谈到API调用时,我感到困惑的是,我应该模拟用于API调用的客户机,还是应该使用一些服务器模拟框架,让真正的客户机调用模拟服务器

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

根据您的经验,在集成测试的客户机-服务器体系结构中测试调用的正确方法是什么?如果我们照章办事,那么应该使用服务器模拟,但是在上面提到的情况下,这种做法可行吗?对于单元测试,很明显应该使用mock

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

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

您需要:

  • 集成测试-使用诸如Wiremock之类的存根服务器,测试诸如超时、错误响应等真实场景
  • 使用Mockito测试客户端类-模拟服务器端点并验证响应

  • 当前测试是为哪个组件编写的?在这种情况下,“服务器”是一个非常流动的概念。您的服务器组件可能正在使用其他HTTP服务,从而成为模拟服务器的客户端。如果测试的焦点是客户机,那么您可以模拟服务器。在这里,你的问题变得有点不清楚了。但是,如果担心的是模拟您应该测试的系统组件,那么您可能应该研究使用代理(模拟服务器、hoverfly等)来存根外部请求的服务虚拟化工具。我倾向于使用junit来驱动非平凡的测试,这是一个最小的可测试单元(即使这意味着运行进程中的客户端和服务器)我应该在问题中更好地定义这一点:我正在创建一个依赖于我无法控制的公共可用服务的客户机。因此,我正在测试客户机是否正常工作,重点是否在客户机上。好的,那么您建议集成测试的目的应该是测试网络连接和各种资源服务器可以发送回的pons。对于#2,我不太明白测试客户机类是什么意思:你指的是单元测试(在这种情况下,服务器模拟没有多大意义),或者您指的是另一种类型的测试,在这种测试中,我应该只测试以验证我发送的内容?您最初询问如何检查您的客户端是否使用参数命中正确的api端点。答案是:只需使用Mockito模拟此端点,我不会告诉您如何进行,因为我不知道您使用的是什么框架。这将是对r您的客户端类。使用存根服务器,您可以进行真正的端到端测试。这是必要的,我认为这是集成测试。我帮了您吗?谢谢您的回答。一般来说,我的问题与首选哪种方法有关:模拟客户端调用还是模拟服务器。如何做不是问题的一部分。大多数人建议应该遵循这个简单的经验法则:如果这些是单元测试,那么模拟客户端;如果这些是集成测试,那么使用模拟服务器。我将更新这个问题,使其更精确。