推荐几个开源类库,超好用,远离996

文章讨论了异步回调的复杂性,提出使用Retrofit简化HTTP服务访问,避免手动管理线程和回调。同时介绍了Faker用于生成格式化的测试数据,以及Wiremock作为模拟服务测试框架的价值。作者强调了自我学习的挑战和系统化学习的重要性,推荐相关技术资源以助于技能提升。
摘要由CSDN通过智能技术生成

(2)异步回调需要自己搞。

异步回调这种模型不好处理,主要就是需要自己去搞线程池,还要对线程池管理,还要考虑出错的重试之类的容错问题,实在麻烦。

所以,我们就需要一套用法简单,不用我们一直搞拼接参数,自己搞线程管理就能完成对第三方 Http 服务访问的库。

其实我们也想过用 Feign 这套框架的。但是,这套东西和 Spring 绑定得太紧了。如果离开 Spring,它的一些功能就没法简单地通过注解直接使用,必须自己写代码调用。

而且,Feign 要实现异步回调方式使用,尤其在协程方面,还是需要自己开发。

这时候,Retrofit 就跳进了我们的选型里。

Retrofit 的模型里,异步回调模型它支持得很好,我们只需要实现一个 Callable 就够了。

并且最清爽的是,它和 Spring 没什么关系。

Retrofit retrofit = new Retrofit.Builder()

.baseUrl(“http://xxx.example.com/”)

.build();

public interface BlogService {

@GET(“blog/{id}”)

Call getBlog(@Path(“id”) int id);

}

BlogService service = retrofit.create(BlogService.class);

Call call = service.getBlog(2);

// 用法和OkHttp的call如出一辙,

// 回调

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

try {

System.out.println(response.body().string());

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void onFailure(Call call, Throwable t) {

t.printStackTrace();

}

});

你看,只需要写上这些代码,我们就不需要操心恼人的 Url 拼接和异步回调的管理问题了。全交给了 Retrofit,着实推荐。

代码库地址

https://github.com/square/retrofit

3. Faker

=========

推荐几个开源类库,超好用,远离996

Faker 是干什么的?

Faker 是专门用来产生各种假数据的辅助工具库。

比如,你想产生个和真实数据一样的有姓名、有地址的用户。

为什么在项目里用它?

我们经常需要造数据去测试,但是,如果没有工具辅助,我们自己造数据,存在一些问题。

(1)数据是需要格式的。

很多项目,都需要一些格式上尽量能模仿真实世界的数据。

比如,国内用户的姓名,大部分都是两字、三字的姓名,叫王大,就不能叫 王da 这种。

又比如,国内的地址是 xx市xx区xx街道xx号这种的,就不能胡写一个几个没意义的汉字来当地址。

用贴近真实格式的数据,一来可以测出我们对用户的数据解析是否存在问题,二来可以测出数据库内的字段长度是否有问题。

所以,格式对产生出可靠的测试结果,是很重要的。

(2)数据的量大。

有的测试数据量都是上十万、百万的,这些量级的数据并不是只会产生一次。

甚至几乎每个项目,每个项目的每次测试,可能都会需要新的数据,大量的数据需要能源源不断地产生出来。

更甚至的是,有时候还想要根据我们的要求,在恰当的时候,产生某种关系的数据,或者以某些特定频率产生。比如,产生一批姓王的数据;比如,两秒后产生一次数据。

以上这三种要求综合起来,要是我们自己造数据,那真是要了命了。

与其自己开发,不如用现成的——Faker 库被我们找到了。

Faker 库可以创造三百多种数据,而且还很容易对它进行扩展改造,去产生更多的贴合我们需求的数据。

Faker faker = new Faker();

String name = faker.name().fullName(); // Miss Samanta Schmidt

String firstName = faker.name().firstName(); // Emory

String lastName = faker.name().lastName(); // Barton

String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449

几行代码,我们需要的一个用户就有了。

用上 Faker 后,小伙伴们纷纷表示“有更多的时间摸鱼了”。

代码库地址

https://github.com/DiUS/java-faker

4. Wiremock

============

推荐几个开源类库,超好用,远离996

Wiremock 是干什么的?

Wiremock 是一个可以模拟服务的测试框架。

比如,你想测试访问阿里的支付相关接口的代码逻辑,就可以用它来做测试。

为什么在项目里用它?

比如,我们需要调用银行接口去做资金业务,调用微信接口去做微信登录……这些调用第三方服务的测试存在一个问题:即太过依赖对方的平台。

假如对方平台限制了一些 IP,或者限制了访问频率,又或者就是服务出现了维护,都会影响我们自身的功能测试。

为了解决上述问题,在之前,我们需要自己写代码模仿第三方的接口,等我们自己全部测试没问题了,再去和第三方联调。对于这种模拟出来的接口,我们称作挡板。

可是,这种方式是个苦活,没人愿意干。因为每接入一个第三方,可能都需要做挡板。辛苦做个挡板,就是单纯为了测试。如果第三方的接口做了改造,你这边还得跟着改。

大家可以想想,换成你自己,你愿意做这么件事儿吗?

这时候,Wiremock 的价值就体现出来了。有了 Wiremock,挡板这种东西就再也不存在了,直接在单元测试里模拟测试即可,像这样:

WireMock.stubFor(get(urlPathMatching(“/aliyun/.*”))

.willReturn(aResponse()

.withStatus(200)

.withHeader(“Content-Type”, APPLICATION_JSON)

.withBody(““testing-library”: “WireMock””)));

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpGet request = new HttpGet(String.format(“http://localhost:%s/aliyun/wiremock”, port));

HttpResponse httpResponse = httpClient.execute(request);

String stringResponse = convertHttpResponseToString(httpResponse);

verify(getRequestedFor(urlEqualTo(ALIYUN_WIREMOCK_PATH)));

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

[外链图片转存中…(img-4AEQYtkH-1710758136013)]

[外链图片转存中…(img-ddaGddbv-1710758136013)]

[外链图片转存中…(img-o4uZO37K-1710758136013)]

[外链图片转存中…(img-x3se8aTv-1710758136014)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值