当前位置: 首页 > 知识库问答 >
问题:

Spring Boot中的Junit不断失败

劳华灿
2023-03-14
@RunWith(SpringRunner.class)
//@SpringBootTest
@WebMvcTest(TokenServiceImpl.class)
public class TokenTest {


    @Test
    public void getOauthToken()
    {

        System.out.println( " done test");

    }
public class TokenServiceImpl implements TokenService{
public String  getToken() throws RuntimeException{
          return  " Token returned"  ;  
    }

我得到以下错误:-snippet

2019-11-27 19:12:45.884警告15864-[main]O.s.w.cs.GenericWebApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfieddependencyException:创建名为“run application”的bean时出错:通过字段“job”表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyException:创建类路径资源[com/mycompany/project1/batch/configurations/batchbdrentityconfig.class]中定义的名称为'job'的bean时出错:通过方法'job'参数4表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“batch dbwriter”的bean时出错:通过字段“bdrEntityRepository”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.mycompany.project1.batch.repositories.bdrEntityRepository”类型的合格bean可用:应至少有一个合格的自带候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

com.mycompany.project1.batch.services.batchdbwriter中得字段BDREntityRepository需要类型为“com.mycompany.project1.batch.repositories.BDREntityRepository”得bean,但找不到该bean.

考虑在您的配置中定义一个类型为“com.mycompany.project1.batch.repositories.bdrEntityRepository”的bean。

原因:org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“run application”的bean时出错:通过字段“job”表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyException:创建类路径资源[com/mycompany/project1/batch/configurations/batchbdrentityconfig.class]中定义的名称为'job'的bean时出错:通过方法'job'参数4表示的不满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“batch dbwriter”的bean时出错:通过字段“bdrEntityRepository”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.mycompany.project1.batch.repositories.bdrEntityRepository”类型的合格bean可用:应至少有一个合格的自带候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

原因:org.springframework.beans.factory.unsatisfieddependencyexception:创建名为“batch dbwriter”的bean时出错:通过字段“bdrEntityRepository”表示的不满足依赖项;嵌套异常为org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.mycompany.project1.batch.repositories.bdrEntityRepository”类型的合格bean可用:应至少有一个合格的自带候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

原因:org.springframework.beans.factory.noSuchBeanDefinitionException:没有“com.mycompany.project1.batch.repositories.bdrEntityRepository”类型的合格bean可用:应至少有一个合格的自带候选bean。依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}

我的主要方法如下

@SpringBootApplication
@ComponentScan(basePackages= {"com.mycompany.project1"})
public class RunApplication{


    private static final Logger logger = Logger.getLogger(BatchController.class);

    @Autowired 
    JobLauncher jobLauncher;

    @Autowired 
    Job job;

    /*
     * jmxBean will get loaded when this managed bean is called from RMI, and it will fire batch execution
     */
    public static void main(String[] args){

        ApplicationContext app = SpringApplication.run(RunApplication.class, args);
        logger.debug("Batch Application has been started...");
        BatchController controller =    app.getBean(BatchController.class);
        //Start batch process when application starts or restart, its optional call and can be commented out
        //as we have JMX to expose load method on demand
        //BatchController batch = new BatchController();
        controller.startBatchProessFromMain();

    }
}

@Component
public class BatchDBWriter implements ItemWriter<BDREntity> {

    private static final Logger logger = Logger.getLogger(BatchDBWriter.class);

    @Autowired
    private BDREntityRepository bDREntityRepository;

    /*
     * this method call the JPArepository's saveAll
     * function and saves all the list of bdrEntitiesat a time.
     */
    @Override
    public void write(List<? extends BDREntity> bdrEntities) throws Exception {

        bDREntityRepository.saveAll(bdrEntities);
    }
}

我如何修复我的Junit?

共有1个答案

贺兴平
2023-03-14

您正在使用@webmvctest这是一个测试切片注释。它专门用于测试应用程序中与WebMVC相关的组件,是集成测试的一种形式。

您在评论中说,您没有尝试对应用程序进行集成测试。在这种情况下,您不应该使用@springboottest或Spring boot提供的任何其他@…test注释。

假设您的目标是对TokenServiceImpl进行单元测试,我希望您的测试类看起来如下所示:

public class TokenTest {

    private final TokenServiceImpl tokenService = new TokenServiceImpl();

    @Test
    public void getOauthToken() {
        String token = this.tokenService.getToken();
        // Assertions to check the token go here
    }

}
 类似资料:
  • 我正在使用JUnit自动化功能测试。我遇到了一个问题:如果我遵循规则“每个测试方法一个(重要的)断言”,那么每个测试用例最终会有一堆6行测试方法(17个是迄今为止最大的数字)。如果我将它们全部放入一个测试方法中,我必须注释掉失败的断言,否则一半的测试永远不会启动。 我不喜欢第一种方式,因为它启动浏览器的次数太多,而且浏览器启动登录/注销似乎比测试运行本身更“昂贵”和耗时。 第二种方法也不好,因为它

  • 我试图使用Junit5为特定的服务类创建单元/集成测试,以避免整个项目过载。 测试类: 错误: 2019-04-03 14:56:06.146警告732---[main]O.S.W.C.S.GenericWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependency

  • JUnit 5中是否有任何机制可以在测试中运行所有assert,即使中间的assert失败?例如: 我的意图是运行所有断言,并跟踪失败的只是第二个,而不是第三个和第一个。

  • 在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟

  • 本文向大家介绍详解springboot中junit回滚,包括了详解springboot中junit回滚的使用技巧和注意事项,需要的朋友参考一下 springboot中使用junit编写单元测试,并且测试结果不影响数据库。 pom引入依赖 如果是IDE生成的项目,该包已经默认引入。 数据库原始数据 原始数据 编写单元测试 结果数据 结果数据 结论 可以看出code=001001的数据没有更改,而co

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,