【mock service系列】Online mock service or API by Sandbox

Sandbox--沙箱,第一反应,但sorry并不是。

sandbox 这个词大家并不陌生,但貌似国内的技术share中很少看到有提到这个工具的。
为避免误解,下文中所有提到sandbox都是指sandbox这个工具,不是沙箱。
另外在两周的使用过程中,感觉比我之前尝试过的mock service的方法都要舒服,并且对程序员更友好。所以愿意安利一波。
希望有遇到同样痛点的朋友,可以给feedback有不同观点也欢迎交流指正。

图片描述

What

Sandbox做什么的,根据其官网上的描述

Quick and easy mock RESTful API and SOAP webservices. Generate from API definitions,
instant deploy, collaborative build, and debugging tools for integration.

可以理解为快速生成API,即时部署,协作构建并集成了调试工具。
更简单的说,你可以用它做假的API,并且马上就可以用。

How

  1. 你可能需要懂点js;

  2. 理解下Sandbox 里面的state;

基本上写代码的部分超级简单,demo自取,getting-start也很简单。
我只是share下有这么个工具,以及简单的用法,其实一步一步的步骤不用讲太多,很简单动手即可。

Why

聊为什么要用sandbox前,说说我之前用过什么其他的方式做mock service吧。

写js的时候,用express写过假的后端service,处理简单数据还行,后面发现数据验证,数据状态不抽离,越到后面越难mock,写ruby的时候,用sinatra直接写了fake server;

遇到过数据量好大,已有的数据在假server重启后就木有了,中间也用过mongodb,但是那个只是解决数据源,并且无形中也是增加了mock的effort;

也有同事推荐swagger,但没用上手,因为也没发现多方便 ,反倒发现swagger-ui很友好;

国内看到有人做了个叫做easy mock的, 感觉对不懂代码的貌似蛮友好各种点点点,但是我还是喜欢直接敲代码那种;

中间有阵子用了docker+mountebank,对于纯粹只是get的,能把业务逻辑和数据分离,还算蛮好用,也是只用处理代码就好,但对于刚入门,可能不推荐。

github上也有一些利用json文件做fake server的 如json-server

聊了这么多,大概可以回答我为什么会推荐使用sandbox了

  1. 关注code,不偏爱UI操作;

  2. 简单,懂js就好,不需要额外effort(mongodb,docker)

  3. state能够保存数据,即使进行到后面,也比较好继续添加新的相关联的api

When

对项目而言,还是觉得最开始就可以;
如果是中期replace为sandbox,如果原来是用类似express的方法,还蛮简单的,如果是其他语言或技术栈的建议先做MVP的spike。

对个人而言,强烈推荐给入门的人。

缺点

安利了那么多,基于客观事实,还是要说些我遇到的不好的方面,

  1. 数据丢失,隔了2天,有一次我的get API没法拿到数据,所以最好要初始化数据的设计,方便恢复;

  2. 服务器不稳定,官网直接挂掉,我经历过一次;

  3. 个人concern ,如果mock service中涉及敏感数据以及安全信息,建议先做一些处理,毕竟放在网上的没有你的本机安全

  4. free plan有request次数限制,今天就遇到了
    图片描述

排除以上几点,在开发code方面,个人觉得对程序员还是蛮友好的。
因为mock service本身其实对数据的稳定性要求也没那么高所以还可以接受(我遇到的case)

意外惊喜

  1. 除了直接在web上的页面上直接写代码,也可以把代码sync到github的codebase里面,这样你只要有本地编辑器+网络+git就好了;

  2. 中间开发基于ios的应用的时候,只能支持https协议,如果是本地mock的service 需要去改配置,这个支持https协议,0改动;

  3. 会给一个域名下的资源链接,所有人可以访问,相当于你的资源以及API就是放在互联网上面的

P.S.其他mock service 推荐

  1. Mocky 实时当下马上可测,但是状态应该不可保存。slogan是Mock your HTTP responses to test your REST API

  2. mockable.io slogan是The Fastest way to mock your API

如果您想使用 Mockito 来模拟一个 Service 中的另一个 Service,可以按照以下步骤进行操作: 1. 在测试类中创建被测试 Service 的实例。 2. 使用 Mockito.mock() 方法来创建要模拟的 Servicemock 对象。 3. 使用 Mockito.when() 方法来指定当调用 mock 对象的某个方法时应该返回什么值。 4. 将 mock 对象注入到被测试 Service 中。 例如,假设您有一个 UserService 和一个 EmailService,UserService 依赖于 EmailService 来发送电子邮件。您想要测试 UserService 的某个方法并且希望在测试中模拟 EmailService。可以按照以下步骤进行操作: ```java public class UserServiceTest { private UserService userService; private EmailService emailServiceMock; @BeforeEach public void setUp() { emailServiceMock = Mockito.mock(EmailService.class); userService = new UserService(emailServiceMock); } @Test public void testSendEmailToUser() { User user = new User("test@example.com"); Mockito.when(emailServiceMock.sendEmail(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(true); boolean result = userService.sendEmailToUser(user, "Subject", "Body"); assertTrue(result); } } ``` 在上面的示例中,我们首先创建了一个 EmailServicemock 对象 emailServiceMock,并使用它来创建 UserService 的实例。然后,我们在测试方法中使用 Mockito.when() 方法指定当调用 emailServiceMock 的 sendEmail() 方法时,应该返回 true。最后,我们调用 UserService 的 sendEmailToUser() 方法,并断言其返回值为 true。 需要注意的是,如果 EmailService 是通过 Spring 容器进行注入的,则在测试环境下,可以使用 @MockBean 注解来创建 EmailServicemock 对象,然后将其注入到 UserService 中。例如: ```java @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @MockBean private EmailService emailServiceMock; @Test public void testSendEmailToUser() { User user = new User("test@example.com"); Mockito.when(emailServiceMock.sendEmail(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(true); boolean result = userService.sendEmailToUser(user, "Subject", "Body"); assertTrue(result); } } ``` 在上面的示例中,我们使用 @MockBean 注解来创建 EmailServicemock 对象,并将其注入到 UserService 中。这样做的好处是,在 Spring 容器中,UserService 将使用 mock 对象而不是实际的 EmailService 实例来发送邮件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值