Api 什么是;“存根”;在编程中是什么意思?

Api 什么是;“存根”;在编程中是什么意思?,api,stub,Api,Stub,例如,这句话的意思是什么 与外部API集成几乎是任何现代web应用程序的保证。为了有效地测试这种集成,您需要将它存根出来。一个好的存根应该易于创建,并且与实际的、当前的API响应保持一致。在这篇文章中,我们将概述一个使用存根的外部API测试策略 在本文中,A表示模拟实现 也就是说,一个简单的伪实现,符合接口并用于测试。您还有一个非常好的测试框架来创建这样的存根。 我最喜欢的一个是还有其他的。。。但是Mockito很棒,您应该阅读它-非常优雅且功能强大的软件包存根是现有依赖项(或协作者)的可控替代

例如,这句话的意思是什么

与外部API集成几乎是任何现代web应用程序的保证。为了有效地测试这种集成,您需要将它存根出来。一个好的存根应该易于创建,并且与实际的、当前的API响应保持一致。在这篇文章中,我们将概述一个使用存根的外部API测试策略

在本文中,A表示模拟实现


也就是说,一个简单的伪实现,符合接口并用于测试。

您还有一个非常好的测试框架来创建这样的存根。
我最喜欢的一个是还有其他的。。。但是Mockito很棒,您应该阅读它-非常优雅且功能强大的软件包

存根是现有依赖项(或协作者)的可控替代品 在系统中。通过使用存根,您可以测试代码而无需 直接处理依赖关系

外部依赖项-现有依赖项:
它是系统中的一个对象,您的代码 受测对象与您无法控制的对象进行交互。(普通 例如文件系统、线程、内存、时间等。) 下面代码中的示例:

public void Analyze(string filename)
    {
        if(filename.Length<8)
        {
            try
            {
                errorService.LogError("long file entered named:" + filename);
            }
            catch (Exception e)
            {
                mailService.SendEMail("admin@hotmail.com", "ErrorOnWebService", "someerror");
            }
        }
    }
public void Analyze(字符串文件名)
{

如果(filename.Length外行术语,则可以使用虚拟数据(或伪数据、测试数据等)来测试或开发代码,直到您(或另一方)准备好呈现/接收真实数据。这是程序员的“Lorem Ipsum”

员工数据库未准备好?请与Jane Doe、John Doe等制作一个简单的数据库。
API未准备好?通过创建包含伪数据的静态.json文件来弥补伪数据。

存根是一个函数定义,具有正确的函数名、正确的参数数量并生成正确类型的伪结果

它有助于编写测试,并充当一种脚手架,使其能够在功能设计完成之前运行示例

在这种情况下,使用“存根”一词代替“mock”,但为了清晰和精确,作者应该使用“mock”,因为“mock”是一种存根,但用于测试。为了避免进一步混淆,我们需要定义存根是什么

在一般上下文中,存根是一段程序(通常是一个函数或一个对象),它封装了调用另一个程序的复杂性(通常位于另一台机器、VM或进程上,但并不总是,它也可以是本地对象)。由于要调用的实际程序通常不在同一内存空间中,因此调用它需要许多操作,例如寻址、执行实际远程调用、封送/序列化要传递的数据/参数(与潜在结果相同)注意,在某些上下文中,存根也称为代理(例如Java中的动态代理)

mock是一种非常特殊且限制性很强的存根,因为mock是用于测试的另一个函数或对象的替代品在测试环境中替换远程程序。在任何情况下,模拟都可以在受限上下文中模拟被替换程序的实际行为

当需要调用远程过程()或远程对象()时,最著名的存根类型显然是用于分布式编程的。大多数分布式编程框架/库自动生成存根,因此您无需手动编写存根。存根可以从接口定义生成,例如使用编写(但您也可以使用任何语言定义接口)

通常,在RPC、RMI、CORBA等中,可以区分客户端存根(主要负责封送/序列化参数并执行远程调用)和服务器端存根(主要负责解封/反序列化参数并实际执行远程函数)/显然,客户端存根位于客户端,而服务器存根(通常称为骨架)位于服务器端


在处理对象引用时,编写高效且通用的存根变得非常具有挑战性。大多数分布式对象框架(如RMI和CORBA)都处理分布式对象引用,但这是大多数程序员在REST环境中避免的。通常,在REST环境中,JavaScript程序员使用sim卡ple存根函数来封装AJAX调用(对象序列化由
JSON.parse
JSON.stringify
支持)。该项目为以各种语言自动生成REST存根提供了广泛的支持。

这个短语几乎可以肯定是与内部建设阶段的类比-“切断”管道。在施工过程中,当墙壁仍然打开时,插入粗糙的管道。这是继续施工所必需的。然后,当周围的一切准备就绪时,一个人会回来,并添加水龙头、厕所和实际的最终产品材料。(参见示例。)


当您在编程中“存根”一个函数时,您构建了足够多的函数来进行处理(用于测试或编写其他代码)。然后,您稍后返回并用完整的实现替换它。

RPC存根

  • 基本上,客户端存根是一个过程,它在客户端看起来就像是一个可调用的服务器过程
  • 服务器端存根看着服务器,就好像它是一个正在调用的客户机一样
  • 客户端程序认为它正在调用服务器;实际上,它正在调用客户端存根
  • 服务器程序认为它是由c调用的
    TestFunction(){
      // Some things here
    
      // Some things here
    
      var result = networkCall(param)
    
      // something depending on the result
    }
    
    String fakeNetworkCall(int param){
      if(param == 1) return "OK";
      else return "NOT OK";
    }
    
    TestFunction(){
      // Some things here
    
      // Some things here
    
      var result = fakeNetworkCall(param)
    
      // something depending on the result
    }