junit无法运行排查

1.报空指针异常

@SpringBootTest
public class BatchPushTaskTest {

    @Autowired
    BatchPushTask batchPushTask;
    @Test
    public void batchPush() {
        batchPushTask.closePush();
    }
}

代码如上,贴上报错信息:

java.lang.NullPointerException
    at com.maple.tyboot.modular.system.task.BatchPushTaskTest.batchPush(BatchPushTaskTest.java:24)

空指针异常,说明我需要自动装配的这个类没有成功装配。可想而知,就没有进行spring的初始化,所以要加上注解让spring初始化完成。在这里我用的是junit4,所以在类头加上@RunWith(SpringJUnit4ClassRunner.class)

2.spring初始化

加上后还是报错,只是不报空指针异常了,报初始化错误。


java.lang.IllegalStateException: Found multiple @SpringBootConfiguration annotated classes [Generic bean: class [com.maple.tyboot.TybootApplication]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\EB\wx-statistical-website\trunk\tyboot-admin\target\classes\com\maple\tyboot\TybootApplication.class], Generic bean: class [com.maple.tyboot.CoreAppConfig]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\EB\wx-statistical-website\trunk\tyboot-core\target\classes\com\ebupt\tyboot\CoreAppConfig.class]]

    at org.springframework.util.Assert.state(Assert.java:94)

从错误信息中可以得到。这个错误是指spring无法正常初始化,因为扫描到多个 @SpringBootConfiguration注解。根据标红字体显示,一个是我这次测试要用到的主程序TybootApplication,另一个是CoreAppConfig。我的项目依赖图如下:有两个模块,都是子项目。这两个错误信息提出来的类分别是两个模块的主程序。

         +------------------+
         |   Parent Project |
         +------------------+
                 |
      +----------|----------+
      |                     |
+-----|-----+        +------|------+
| Subproject1|        | Subproject2|
+------------+        +-------------+
所以要指定主程序,以让spring能够正确读取配置。加上注解@ContextConfiguration(classes = TybootApplication.class) 

3.bean名字相同,无法注册

Cannot register bean definition [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=cn.stylefeng.roses.core.config.WebAutoConfiguration; factoryMethodName=error; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [cn/stylefeng/roses/core/config/WebAutoConfiguration.class]] for bean 'error': There is already [Generic bean: class [com.maple.tyboot.core.base.controller.TybootErrorView]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in file [D:\EB\wx-statistical-website\trunk\tyboot-core\target\classes\com\ebupt\tyboot\core\base\controller\TybootErrorView.class]] bound.

上一步加完以后,又有报错。不过报的错不太一样,这个是在注册bean的过程中发生的错误。可见好歹spring开始初始化了。

这个异常信息表明在注册一个名为 ‘error’ 的 Bean 定义时发生了冲突。根据异常信息,存在两个具有相同名称但类型不同的 Bean 定义:

  1. 第一个 Bean 定义是一个由名为 WebAutoConfiguration 的工厂类的方法 error 创建的 Bean。这个 Bean 的类型是 null,可能是因为类型未正确设置或无法确定。

  2. 第二个 Bean 是一个类型为 com.ebupt.tyboot.core.base.controller.TybootErrorView 的自定义 Bean。它是一个单例 Bean,已经被注册到 IoC 容器中。

要解决这个问题,可以考虑以下几种方法:

1. 检查 `WebAutoConfiguration` 类中的 `error` 方法,确保正确设置了返回的 Bean 的类型。确保类型与 `com.ebupt.tyboot.core.base.controller.TybootErrorView` 不冲突。

2. 如果 `WebAutoConfiguration` 类是您自己定义的,可以尝试修改方法名,以避免与现有的 Bean 名称冲突。

3. 如果 `WebAutoConfiguration` 类是第三方库或框架提供的,您可以尝试在您的应用程序的配置中排除或禁用该自动配置类,以阻止该冲突的 Bean 注册。

4. 检查是否在其他地方使用了相同的名称 'error' 注册了其他 Bean。如果有,您可以尝试修改其中一个的名称,以确保它们不会冲突。

 我的情况是第三种,所以我直接禁用这个类。也就是加了注解

@EnableAutoConfiguration(exclude = WebAutoConfiguration.class),最后终于成功运行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot是一个开源的Java开发框架,它使得开发者能够快速、方便地构建独立的、基于Spring的应用程序。Jenkins是一个流行的自动化构建工具,它可以帮助开发团队实现持续集成和持续交付。Jenkins与SpringBoot结合使用可以实现自动化构建和部署SpringBoot应用程序的流程。JUnit是一个Java的单元测试框架,它提供了一种方便的方式来编写和运行单元测试。在SpringBoot中使用Jenkins和JUnit可以实现对应用程序进行自动化的单元测试和集成测试。 在Jenkins中,你可以使用Pipeline语法编写流水线脚本来定义构建过程。使用Jenkins的JUnit插件,你可以在构建过程中运行JUnit测试,并生成测试报告。测试报告可以帮助开发团队及时发现和修复代码中的问题。 关于SpringBoot、Jenkins和JUnit的详细学习资料,你可以参考以下资源: - 《JUnit5学习》系列文章可以提升在SpringBoot环境下的单元测试技能。 - Jenkins官方文档提供了关于流水线、测试和构件的详细说明。 - Jacoco官方文档介绍了Jacoco代码覆盖率工具的使用方法。 - 有关Jenkins单元测试的两篇文章提供了实际操作的指导。 - 《Jenkins 2.X Script Pipeline语法基础》一文介绍了Jenkins流水线脚本的基本语法。 如果你在使用Jenkins进行SpringBoot应用程序的单元测试时遇到了问题,你可以参考以下一些常见问题和解决方法: - "Jenkins mvn not found"错误可能是由于Jenkins环境变量中未添加Maven路径导致的。你可以在Jenkins配置中添加Maven路径以解决该问题。 - "NullPointerException in Jenkins"错误可能是由于流水线脚本中的wrap{}语法不支持所导致的。你可以尝试使用其他语法解决该问题。 - "Error cloning remote repo 'origin'"错误可能是由于流水线脚本书写错误所导致的。你可以检查脚本中的语法错误并进行修正。 - "There is insufficient memory for the Java Runtime Environment to continue"错误可能是由于服务器资源不足导致的。你可以整理服务器资源,关闭不常用的Docker容器来释放内存。 - "Could not initialize class jackson.databind.deser.std.JdkDeserializers"错误可能是由于依赖问题导致的。你可以尝试删除某些依赖或更换JDK版本来解决该问题。 - "java.lang.ArrayIndexOutOfBoundsException"错误可能是由于代码中的错误导致的。你可以尝试排查代码中的问题并进行修复。 - "Step 'Publish JUnit test result report' failed: No test report files were found"错误可能是由于测试报告文件未找到所导致的。你可以检查测试报告文件是否正确生成并配置正确的路径。 - "Failed to read test report file"错误可能是由于测试报告文件读取失败所导致的。你可以尝试重新生成测试报告文件或检查文件读取权限。 希望以上信息对你有帮助。祝你在SpringBoot、Jenkins和JUnit的学习和实践中取得成功!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [blog_demos:CSDN博客专家程序员欣宸的github,这里有四百多篇原创文章的详细分类和汇总,以及对应的源码,...](https://download.csdn.net/download/weixin_42116847/14986863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Jenkins实战先看这:Jenkins 集成Junit单元测试+Jacoco统计覆盖率](https://blog.csdn.net/l_mloveforever/article/details/121603703)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值