Spring测试抛出org.springframework.beans.factory.NoSuchBean定义异常:没有类型为的合格bean
我的web应用程序运行良好。但是当我试图为我的dao类添加测试用例时。我在这篇文章的最后一部分提到了错误 我在同一个文件夹中有UserDaoTest和UserDaoImpl/UserDao 这里是UserDaoTestSpring测试抛出org.springframework.beans.factory.NoSuchBean定义异常:没有类型为的合格bean,spring,junit,spring-test,Spring,Junit,Spring Test,我的web应用程序运行良好。但是当我试图为我的dao类添加测试用例时。我在这篇文章的最后一部分提到了错误 我在同一个文件夹中有UserDaoTest和UserDaoImpl/UserDao 这里是UserDaoTest package com.User.orm.dao; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader=AnnotationConfigContextLoader.cl
package com.User.orm.dao;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=AnnotationConfigContextLoader.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,
DbUnitTestExecutionListener.class })
public class UserDaoTest {
@Autowired
private UserDao UserDao;
@Test
public void testFind() throws Exception {
List<UserProfile> up = UserDao.searchUsers("test",null);
System.out.println("test");
}
}
为单元测试生成配置类。通过实现@configuration注释定义配置类。然后使用@ComponentScan从包中获取bean
@Configuration
@ComponentScan("com.User.orm.dao")
public class AppConfig {
@Bean
public UserDao userDao() {
return new UserDao();
}
}
确保UserDao有@Component或@Service注释。另外,作为建议,我建议对DAO使用@Repository而不是@Component。它有助于指定类的意图,并限定DAOs引发的未经检查的异常,将其转换为DataAccessException。是的,您是对的,我们可以使用Repository而不是@Component,它将变得更为具体,并有利于错误处理,但大多数情况下,组件都可以正常工作。还有一件事……如果您要使用@Rezwan的方法,我很确定您还需要使用@WebAppConfiguration为您的测试类添加注释。希望这能奏效:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.User.orm.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
@Configuration
@ComponentScan("com.User.orm.dao")
public class AppConfig {
@Bean
public UserDao userDao() {
return new UserDao();
}
}