Junit4 一直处于运行中的排查过程

这篇具有很好参考价值的文章主要介绍了Junit4 一直处于运行中的排查过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  新买了一个Macbook Pro . 之前的工程搬家过来, 这天要跑个单元测试。 发现Junit4 一直处于运行中。没有错误信息,没有用例执行结果。遂开始排查原因。

  这里插一句,苹果芯片的Mbp还是很好用的,除了性能够用之外,最主要是安静+不热。 这对比我之前的i7版本的真是太明显了。 之前的i7在外接显示器的情况下,风扇狂转,还降频。苹果抛弃Intel还是有道理的。

  回正题, 这类比较诡异问题的排查,一般思路就是猜+试 ,但试和猜的逻辑要清晰。本文主旨也是在于思路总结。

 文章来源地址https://www.toymoban.com/news/detail-504356.html

  一、测试类是不是写的有问题?

  很好排查,跑跑其他之前写的测试类, 果然也不好用了。 说明跟具体的测试类无关。

  

  二、是工程的问题还是我自身环境的问题?

  小X, 我这儿为啥跑不了单元测试了。 你试试能跑了。 小X: “我这里可以跑,没问题”。 可见应该跟我的环境配置有关。 

  ——持续在执行中,且没有错误,并且与个体环境有关。 如果有经验的同学,很容易想到,这可能说明,测试过程在正常执行,只是非常缓慢。环境相关的性能问题,往往与网络有关。

  

  三、化简工程后,是否正常工作?

  实际项目的工程往往比较复杂, 管理的Bean动辄,几百上千。 这些Bean可能有各种初始化方法, 阻塞了程序的启动,导致了Junit 卡在Spring上下文建立的过程中。测试过程就无法开始运行。

  因此,缩小扫描路径范围, 对一个依赖其他Bean较少的Bean做单元测试。 发现执行正常。

  ——这说明应该确实是卡在了某些Bean的创建过程中

 

  四、缩小范围

  从上面的试验结果很容易想到,如果逐步将Beans加入到扫描路径,就可以定位出具体是哪个Bean引起的阻塞问题。经过尝试发现,工程用到了dubbo,其中的 provider service 越少,@Test执行的越快,当多到一定程度时,

  就会表现为,一直处于运行中的状态了。

  ——这里已经可以定位到,导致问题的表面原因了。猜测可能是dubbo与注册中心的网络通信过程,造成的影响。

  

  五、 源码调试

  开源的好处是,源码之前了无秘密,但通常源码也没那么容易看懂 o(* ̄︶ ̄*)o。 跟了一段执行过程的源码,暂时没有发现明确的原因

  ——源码面前了无秘密肯定是真理,耐心跟一定会发现原因的。

  

  六、柳暗花明

  跟源码跟的不耐烦之际,觉得这么调有点费劲。想在忙碌的过程中直接调试器暂停执行,也许会断到引起阻塞的问题代码附近。于是,重新调试执行测试,在等待一段超出正常范围的时间后,按下调制器的暂停。

  通过调用栈往上找找,果然是在dubbo的包内。观察了下附近有一个非常可疑的。

InetAddress.getLocalHost().getHostAddress()

  ChatGpt了下,Gpt说:
  注意:在生产环境中,反复调用 InetAddress.getLocalHost().getHostAddress() 是不推荐的,因为这可能是一个耗时的操作。通常,获取本地IP地址是一个一次性的任务,应该在应用程序启动时执行,并缓存结果以供后续使用。

  然后阅读了附近的源码,发现dubbo当取得prodiver 的hostip 是 127.0.0.1 或者 localhost 时。会调用这个方法, 取得一个网络上的IP。(例如192.168.1.X之类)。

  尝试将prodiver 的 host 从 127.0.0.1  配置为 网络IP后, 问题解决。

 

  总结:

  问题的原因是当provider host配置为 127.0.0.1 时,会调用耗时操作。 当provider 提供的service 很多时。就会成倍放大这个耗时操作的时间。这个原因跟猜测,以及经验,现象都是能相互验证的。

 

  宝贵经验:

  1. InetAddress.getLocalHost().getHostAddress()  是一个耗时操作,在某些网络环境下可能非常慢。

  2.今后遇到这种一直执行中不报错的情况,应该直接点暂停,读源码 -_-||。

  

  

 

到了这里,关于Junit4 一直处于运行中的排查过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring整合Junit4

    好处1:不需要自己创建IOC容器对象了 好处2:任何需要的bean都可以在测试类中直接享受自动装配 ①加入依赖 ②创建测试类

    2024年02月20日
    浏览(48)
  • Junit4单元测试的使用

    导入Junit4依赖 要使用单元测试,首先我们得在项目中导入Junit4的jar包。 普通导入方式 ,在项目目录下创建一个lib文件夹,然后将Junit4的jar复制进来,然后右键点击Add as Library 将jar设为依赖。 在这里插入图片描述 Maven项目导入方式 ,在maven的配置文件pom.xml直接添加依赖坐标

    2024年02月13日
    浏览(44)
  • springboot框架(2):整合junit4

    junit用于单元测试。 新建springboot项目(不依赖任何插件,所以不需要选择任何插件) 引入test依赖(新建项目自动引入了这个依赖,如果没有这个依赖,才需要添加) 高版本的springboot(例如:2.6.5)只有junit5没有引入junit4,所以需要导入依赖(如果出现import灰色时,请检查是不是需要导

    2023年04月26日
    浏览(39)
  • Junit4入门之什么是单元测试?

    干了一年多的后端了,从来没有了解过 单元测试 。虽然我知道测试不仅仅是测试们的任务,后端也要进行自测来保证自己的代码的可用性,但我一直都只是用postman来实施的,调用调通了即可。虽然我也知道Junit是用于测试的软件,项目里也引入过,但真的就只是点到为止,

    2024年03月18日
    浏览(72)
  • IDEA使用Junit4进行单元测试

            单元测试不仅能帮我们验证代码逻辑,还可以通过执行时间进行快速筛选不合格代码并进行优化。核心模块的代码的单元测试覆盖率要达到100%,其他模块代码的单元测试覆盖率需要达到60%。下面将介绍在IDEA上使用Junit4进行单元测试的方法: 一、安装JunitGenerator2插件

    2023年04月16日
    浏览(40)
  • 浅谈java单元测试框架junit4/5

    junit是一个开源的Java语言的单元测试框架。目前junit主要有版本junit3,junit4和junit5。因在junit3中,是通过对测试类和测试方法的命名来确定是否是测试,且所有的测试类必须继承junit的测试基类TestCase,所以本文不再讨论junit3,只讨论使用比较多的junit4和junit5。 提供注解标识测

    2024年02月03日
    浏览(38)
  • Junit4 + Mockito进行单元测试实战案例

    ​ 实战代码案例: ​​​​​​​​​​​ 注意:idea2021.3.3之前的版本都搜索不到这个插件。 使用TestMe自动生成单元测试代码: 不是自动化执行的单元测试都是无意义的,项目中那么多单测,难道一个一个点吗? 引入maven-surefire-plugin插件用于自动化执行单测。 include里表

    2024年02月16日
    浏览(52)
  • Java高级技术 单元测试(JUnit4)

    所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。 我们之前一直使用的测试便是通过main方法来实现,但在main方法中写测试代码有如下的几个问题存在: 只能在main方法编写测试代码,去调用其他方法进行测试。 无法实现自动化测试,一个方法测

    2024年02月03日
    浏览(47)
  • 在Idea中使用Junit4进行单元测试

    #初学者,为了对知识进行巩固写这个文章,有问题欢迎指出,欢迎讨论 在Setting - Plugins - Marketplace中搜索JUnit,点击Apply后重启Idea 创建的类和文件夹 按照这个顺序就可以啦 点击OK后,在我们的Test文件夹中就出现了一个测试文件

    2024年02月03日
    浏览(50)
  • 基于Junit4+Mockito+PowerMock实现Controller+Service的单元测试

    一 导入的依赖 二 依赖版本 三 controller测试示例代码       controller         controllerTest         测试结果:覆盖率100%         带异常的Controller         带异常提示的ControllerTest         测试结果,覆盖率100%   三 service测试示例代码         service         serviceTest    

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包