预期至少有 1 个 bean 在测试中有资格作为自动装配候选者

Expected at least 1 bean which qualifies as autowire candidate in Test

我是 Spring 的新人。我正在使用 Spring Boot 创建一个控制台应用程序。应用程序工作正常,但是当我尝试测试存储库时,出现错误

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'universityManagerSpringBootApplication': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.universitymanager.springboot.engine.ResponseGenerator' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

请帮忙

响应生成器

@Component
@AllArgsConstructor
public class ResponseGenerator {

    private final DepartmentsRepository departmentsRepository;
    private final LectorsRepository lectorsRepository;
...

部门

@Entity
@NoArgsConstructor
@Setter
@Getter
@ToString
@Table(name = "departments")
public class Departments {
...

讲师

@Entity
@NoArgsConstructor
@Setter
@Getter
@ToString
@Table(name = "lectors")
public class Lectors {
...

部门资料库

@Repository
public interface DepartmentsRepository extends CrudRepository<Departments, Integer> {
...

LectorsRepository

@Repository
public interface LectorsRepository extends CrudRepository<Lectors, Integer> {
...

UniversityManagerSpringBootApplication

@SpringBootApplication
@AllArgsConstructor
public class UniversityManagerSpringBootApplication implements CommandLineRunner {

    private ResponseGenerator responseGenerator;

    public static void main(String[] args) {
        SpringApplication.run(UniversityManagerSpringBootApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
...

DepartmentsRepositoryTest(导致错误)

@DataJpaTest
class DepartmentsRepositoryTest {

    @Autowired
    private DepartmentsRepository departmentsRepository;

    @Test
    void injectedComponentIsNotNull(){
        assertNotNull(departmentsRepository);
    }
...

请尝试在您的测试中将 @DataJpaTest 更改为 @SpringBootTest,以使 Spring 在包括 ResponseGenerator bean 的完整应用程序上下文中设置。

@DataJpaTest 的文档说:

Using this annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests.

因此,使用此注释,您不会获得堆栈跟踪引用的 ResponseGenerator bean。

如果您正在使用 TestNG,请尝试让您的测试 class 扩展 AbstractTestNGSpringContextTests,这有助于访问 TestNG 中的 spring 组件。

public class DepartmentsRepositoryTest extends AbstractTestNGSpringContextTests

我找到了解决问题的方法!这对我来说很好

很高兴这对某人有帮助