Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit5测试无法注入依赖项,但正常运行的应用程序可以注入依赖项_Java_Spring Boot_Junit_Junit5_Spring Boot Test - Fatal编程技术网

Java Junit5测试无法注入依赖项,但正常运行的应用程序可以注入依赖项

Java Junit5测试无法注入依赖项,但正常运行的应用程序可以注入依赖项,java,spring-boot,junit,junit5,spring-boot-test,Java,Spring Boot,Junit,Junit5,Spring Boot Test,目前,我在一个项目中工作,我创建了@Entity类,@Repository来存储一些信息。我创建了一个与其他现有服务一样的服务,然后尝试将@service注释类注入到带有@RestController注释的控制器中。它工作完美,能够正常运行应用程序而不出现问题,即没有注入问题 现在,当我尝试运行现有项目的测试时,它失败了,因为我的服务无法注入控制器类。获取此错误: No qualifying bean of type 'com.example.service.exampleService' av

目前,我在一个项目中工作,我创建了
@Entity
类,
@Repository
来存储一些信息。我创建了一个与其他现有服务一样的服务,然后尝试将
@service
注释类注入到带有
@RestController
注释的控制器中。它工作完美,能够正常运行应用程序而不出现问题,即没有注入问题

现在,当我尝试运行现有项目的测试时,它失败了,因为我的服务无法注入控制器类。获取此错误:

No qualifying bean of type 'com.example.service.exampleService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
现在我厌倦了字段和构造函数注入,每次都遇到相同的问题,但我遵循的是项目以前使用的相同模式。我非常确信自动布线和其他工作都已正确完成,否则我创建的端点将无法工作

我的问题是为什么会发生这种情况?i、 它在作为spring启动应用程序运行时工作,但不在测试上下文中。我试着去关注其他的帖子,但我不能关注它们,因为大多数帖子都是在4岁之前发布的

目前我正在使用Junit5

下面是我的测试类的样子

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;


@WebMvcTest
@AutoConfigureMockMvc(addFilters = false)
@ExtendWith(MockitoExtension.class)
public class sampleTest{

 @Test
    public void sampletesting() throws Exception{
      ...
    }
}
以下是我正在使用的依赖项和Spring引导版本:

    plugins {
        id 'org.springframework.boot' version '2.3.0.RELEASE'
        id 'io.spring.dependency-management' version '1.0.9.RELEASE'
        id 'java'
        id 'jacoco'
    }
 testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation('org.mockito:mockito-core:3.5.13')
    testImplementation('org.mockito:mockito-inline:3.5.13')
    testImplementation('org.mockito:mockito-junit-jupiter:3.5.13')

我使用的是Java 11

@WebMvcTest
用于仅加载应用程序中所有可用bean的特定部分的情况:web控制器(以及其他一些与web mvc相关的类,如转换器等)。它不会加载任何服务,这是有意的:

使用
@WebMvcTest
意味着您希望测试控制器代码(所有注释都定义正确,等等)。通常在这种测试中,您将调用controller方法,使用名为
mockMvc
的东西,并检查预期结果

您可以阅读有关此类测试的信息。通常控制器会注入服务,在这种情况下,您应该在服务上使用
@MockBean

严格来说,这就是失败的原因


现在,如果要加载整个应用程序上下文,请考虑使用<代码> @ SpRunBooTest。您还必须考虑在测试期间应该可以访问的数据库。

我收到了相同的问题,我也需要这方面的帮助。因为您使用的是
@WebMvcTest
,它只引导应用程序的web部分,不包括服务,daos等。如果您的控制器使用某项服务,则需要将该服务的
@MockBean
添加到此测试中。为什么不使用
@springbootest
注释?根据我的经验,如果您没有使用
@springbootest
注释,那么必须配置您的上下文和beanmanually@M.Deinum伟大的它起作用了,实际上我没有意识到。谢谢你的帮助@如果你也面临着这个问题,请尝试一下德纳姆先生所说的。