首页 文章 精选 留言 我的

精选列表

搜索[Java],共10000篇文章
优秀的个人博客,低调大师

spider-flow 0.3.2 发布,Java 开源爬虫平台

spider-flow 是一个无需写代码的爬虫平台,通过定义流程的方式制定爬虫 更新日志 修复前端日志不输出的BUG 修复前端日志滚动条不显示的问题 修复输出全部参数的未选中也输出的BUG 修复Cookie批量设置的BUG 修复任务未执行,查询日志失败的问题 优化插件描述 优化任务日志拆分文件 优化重启服务后,重置任务下一次执行时间 优化测试窗口可最大最小化 selenium插件 新增loadCookies方法,获取最新Cookies 新增默认resp变量可以改名(防止冲突) 调整默认不选无头模式,默认启用JS

优秀的个人博客,低调大师

spider-flow 0.3.1 发布,Java 开源爬虫平台

spider-flow 是一个无需写代码的爬虫平台,通过定义流程的方式制定爬虫 更新日志 新增Header、Cookies批量设置 新增变量、参数、输出、函数、header、cookie拖动调整执行顺序 新增插件功能描述及功能区显示 新增map.toList、list.sort、object.sleep函数 修复listVar.join中list.length为1时返回异常 修复下次执行时间计算不正确的问题 修复右键粘贴时保存不成功的BUG 修复Cookie值不能使用表达式的BUG 优化日志,修改其实现方式 优化xpath解析方式,修复原解析xpath异常错误 优化favicon替换掉默认的图标 Selenium插件重构 支持Chrome、Firefox驱动 支持Cookie自动管理 支持驱动参数配置 支持模拟鼠标移动,点击,双击,释放等事件 支持HTTP代理

优秀的个人博客,低调大师

Java几种常用的断言风格你怎么选?

日常工作中,不管你是写Unit Test,还是采用TDD的编程方式进行开发,都会遇到断言。而断言的风格常见的会有Assert、BDD风格,对于这些常见的断言风格你怎么选择呢? 01 Assert风格 JUnit中提供了这样的assert断言风格,例如: [@Test](https://my.oschina.net/azibug) void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { EntranceMachine entranceMachine = new EntranceMachine(EntranceMachineState.LOCKED); String result = entranceMachine.execute(Action.INSERT_COIN); assertEquals("opened", result); assertEquals(EntranceMachineState, entranceMachineState.UNLOCKED); } Hamcrest和AssertJ都提供了assertThat()这样风格的断言,例如: AssertJ提供的assertThat()的断言语法 [@Test](https://my.oschina.net/azibug) void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { EntranceMachine entranceMachine = new EntranceMachine(EntranceMachineState.LOCKED); String result = entranceMachine.execute(Action.INSERT_COIN); assertThat(result).isEqualsTo("opened"); assertThat(EntranceMachineState).isEqualsTo(entranceMachineState.UNLOCKED); } Hamcrest提供的assertThat()断言语法 [@Test](https://my.oschina.net/azibug) void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { EntranceMachine entranceMachine = new EntranceMachine(EntranceMachineState.LOCKED); String result = entranceMachine.execute(Action.INSERT_COIN); assertThat(result, is("opened")); assertThat(EntranceMachineState, is(entranceMachineState.UNLOCKED)); } 对比上面三种断言语法,因为场景简单,所以结果差异并不是很大。对于我个人更加偏向于使用AssertJ提供的断言风格。因为这种风格避免JUnit提供的断言中经常遇到的问题,expected在前还是actural在前的问题。相比于Hamcrest的断言风格,在日常工作中综合对比发现AssertJ的更加清晰,毕竟AssertJ中assertThat只需要接收一个参数,而不用关注括号是否对齐的问题。 日常工作中如果使用TDD,且场景适当(例如上面例子),那么Hamcreate和AssertJ的差别不是很大。JUnit5默认提供了Hamcreate的断言,不需要额外的再引入其他依赖。 02 BDD风格 代码的可读性越来越收到开发者的重视。测试代码的可读性同样重要,为了让测试代码结构清晰,便于业务逻辑变动时能快读读懂测试的上下文,很多开发团队约定了BDD的风格来组织测试代码。其中包含两部分的约定:测试方法名的约定,测试代码段落的约定。 例如前面的例子: [@Test](https://my.oschina.net/azibug) void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { ... } 虽然方法名很长,但是通过方法名我们能够快速知道测试类中有哪些测试,通过方法名我们能够清晰的当前测试的上下文,在测什么,期望的结果什么。通过方法名而不是通过比方法名长很多的代码段来获取测试在测什么的信息,毕竟阅读代码时间和修改代码时间可能是10:1,甚至20:1。所以团队约定BDD的风格组织在后续修改代码时,是受益良多的。 当需要也带具体的测试代码的时候,团队发现按照BDD这种三段式的风格来组织代码受益良多。例如: [@Test](https://my.oschina.net/azibug) void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { EntranceMachine entranceMachine = new EntranceMachine(EntranceMachineState.LOCKED); String result = entranceMachine.execute(Action.INSERT_COIN); assertThat(result).isEqualsTo("opened"); assertThat(EntranceMachineState).isEqualsTo(entranceMachineState.UNLOCKED); } 我们可以清晰的知道哪行代码在描述上下文,哪几行代码在描述测试意图,哪几行代码在描述测试结果验证。 BDD的风格能够帮助团队将测试代码维护的较为清晰。AssertJ提供了BDD风格的断言方式。使用then()语法。例如: @Test void should_be_unlocked_when_insert_coin_given_a_entrance_machine_with_locked_state() { EntranceMachine entranceMachine = new EntranceMachine(EntranceMachineState.LOCKED); String result = entranceMachine.execute(Action.INSERT_COIN); then(result).isEqualsTo("opened"); then(EntranceMachineState).isEqualsTo(entranceMachineState.UNLOCKED); } 断言变化不大。但是真正仔细读的时候,会发现使用then()还是简单那么一点点的。 我们常用的Mock工具Mockito,也提供了BDD风格的断言:then(), should(), and()。 import static org.mockito.BDDMockito.then; import static org.assertj.core.api.BDDAssertions.and; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @SuppressWarnings("static-access") @Test public void bdd_assertions_with_bdd_mockito() { Person person = mock(Person.class) person.ride(bike); person.ride(bike); then(person).should(times(2)).ride(bike); and.then(person.hasBike()).isTrue(); } 所以日常开发中,我会首先选择then(),其次会选择assertThat()。 除了以上两种断言风格,流式断言让代码更清晰,断言重复内容更少 当我们需要为某个结果测试多个测试点时,如果为每个测试点都组织一次相同的上下文,那么重复代码太多。带来的价值就是那么一点点区别,所以在测试力度上我们可以根据经验来在开发工程中动态调整。 下面据一个例子,当我们需要验证有一个查询方法返回的List的结果时,不单单要验证List中元素的数量,还要验证元素是否时期望的顺序。那么流式写法会缩减一部分重复的断言代码。 then(users).hasSize(3) .containsExactlyInAnyOrder( firstUser, secondUser, thirdUser); 上面是日常工作中经常使用到的断言技巧,你的怎么选择的呢?那种风格无所谓能工作就行? 参考 Hamcrest AssertJ

优秀的个人博客,低调大师

SOFARPC 发布 v5.6.3 版本,Java RPC 框架

本期发布内容 虽然是个小版本升级,但是干货不少,详情请见https://github.com/sofastack/sofa-rpc-boot-projects/releases 鼓励目前正在使用 5.6.x 版本的用户升级 New Features (新功能) PR 788- support msgpack serialization 支持msgpack序列化 PR 770- H2 TLS security support H2 TLS安全协议支持 PR 716- Support GRPC 支持GRPC Enhancement (新特性) PR 812- feat:usually we do not open the switch of sec or blacklist PR 811- chore:print extension loader debug info instead of error PR 807- support non-registered center ip for direct connection PR 800- feat:add custom parameter to values PR 799- feat:add some headers to sofa request PR 792- chore:remove fetch group name PR 789- update netty 4.1.42 PR 712- Enable baggage-items for rpc reseteasy mode Bug Fix PR 808- fix:fix simple map serializer (805) PR 795- bugfix:fix npe of AbstractCluster PR 794- chore:fix alert for jackson-databind PR 783- Fix data util test when run in a Daylight Saving Time

优秀的个人博客,低调大师

spider-flow 0.3.0 发布,Java 开源爬虫平台

spider-flow 是一个无需写代码的爬虫平台,通过定义流程的方式制定爬虫 更新日志 新增Cookie自动管理功能 新增resp.links()、resp.images()、resp.title函数 新增url批量下载,不用先爬取再下载 新增string.lastIndexOf、thread.sleep()、list.filterStr函数 新增多函数执行方法 新增任务状态、任务执行记录 修复爬虫名称有空格时,tab页打不开的BUG 修复爬虫名称在编辑时未能获取到名称的BUG 优化对返回结果resp.json、resp.html进行缓存 优化请求延迟时间对第一次执行也生效

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册