(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
=========
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
============
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开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
[外链图片转存中…(img-4AEQYtkH-1710758136013)]
[外链图片转存中…(img-ddaGddbv-1710758136013)]
[外链图片转存中…(img-o4uZO37K-1710758136013)]
[外链图片转存中…(img-x3se8aTv-1710758136014)]