预期至少有 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
我找到了解决问题的方法!这对我来说很好
很高兴这对某人有帮助
我是 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
我找到了解决问题的方法!这对我来说很好
很高兴这对某人有帮助