Java 为什么在Spring JUnit测试中使用@Autowired注释时会出现嵌套异常?
我们开始在大学学习Spring,所以我们必须和JPA一起开发一个项目,所以我必须测试JPA是否正常工作。问题是我在执行测试时获得了这个跟踪 org.springframework.beans.factory.unsatifiedpendencyException:创建名为“persistence.DatabaseTest”的bean时出错:通过字段“uS”表示未满足的依赖关系; 嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException: 没有“services.UserService”类型的合格bean可用:至少需要1个符合autowire候选条件的bean 我不确定是哪个元素引发了嵌套异常。这些是我的课程: main.test.persistence.DatabaseTestJava 为什么在Spring JUnit测试中使用@Autowired注释时会出现嵌套异常?,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我们开始在大学学习Spring,所以我们必须和JPA一起开发一个项目,所以我必须测试JPA是否正常工作。问题是我在执行测试时获得了这个跟踪 org.springframework.beans.factory.unsatifiedpendencyException:创建名为“persistence.DatabaseTest”的bean时出错:通过字段“uS”表示未满足的依赖关系; 嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinition
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest({"server.port=0"})
public class DatabaseTest {
private User u1, u2, u3, u4;
@Autowired
private UserService uS;
@Before
public void setUp(){
//Here I initialize users but nothing like uS = whatever;
}
@Test
public void testUser() {
assertTrue(uS.findAll().size()==0);
addUsers();
assertTrue(uS.findAll().size()==4);
assertTrue(uS.checkExists(u1.getId()));
assertTrue(uS.checkExists(u2.getId()));
assertTrue(uS.checkExists(u3.getId()));
assertTrue(uS.checkExists(u4.getId()));
deleteUsers();
assertTrue(uS.findAll().size()==0);
}
private void addUsers(){
uS.save(u1);
uS.save(u2);
uS.save(u3);
uS.save(u4);
}
}
main.java.services.UserService
public interface UserService {
void save(User user);
void delete(User user);
boolean checkExists(Long id);
List<User> findAll();
}
公共接口用户服务{
作废保存(用户);
作废删除(用户);
布尔校验存在(长id);
列出findAll();
}
main.java.services.impl.UserServiceImpl
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserRepository repository;
@Override
public void save(User user) {
repository.save(user);
}
@Override
public List<User> findAll() {
List<User> users = new ArrayList<>();
if (repository.findAll() != null) {
Iterator<User> it = repository.findAll().iterator();
while (it.hasNext())
users.add(it.next());
}
return users;
}
@Override
public void delete(User user) {
repository.delete(user);
}
@Override
public boolean checkExists(Long id) {
return repository.findOne(id) != null;
}
}
@服务
公共类UserServiceImpl实现UserService{
@自动连线
私有用户存储库;
@凌驾
公共作废保存(用户){
保存(用户);
}
@凌驾
公共列表findAll(){
列表用户=新建ArrayList();
if(repository.findAll()!=null){
迭代器it=repository.findAll().Iterator();
while(it.hasNext())
users.add(it.next());
}
返回用户;
}
@凌驾
公共作废删除(用户){
删除(用户);
}
@凌驾
公共布尔校验存在(长id){
返回存储库。findOne(id)!=null;
}
}
main.java.persistence.repositories.UserRepository
@Transactional
public interface UserRepository extends JpaRepository<User, Long> {
public User findByEmail(String email);
}
@Transactional
公共接口用户存储库扩展了JpaRepository{
公共用户findByEmail(字符串电子邮件);
}
提前感谢。它说,它无法注入Dependency private UserService uS。如果提供了@ComponentScan注释,是否可以签入Application.class?如果提供,请检查基本包装。如果不是,试着提供它。@LyjuIEdwinson是的,谢谢,这解决了我的问题。。。但是现在我得到了另一个问题,所以我将添加另一个问题。很高兴知道它解决了这个问题。如果您正在启动一个新的Spring项目,我建议您下载一个现有的项目并从那里开始。这会让你的生活变得更轻松。您可以简单地使用CLIs或STS工具或从web上执行它,它说,它无法注入依赖性私有用户服务uS。如果提供了@ComponentScan注释,是否可以签入Application.class?如果提供,请检查基本包装。如果不是,试着提供它。@LyjuIEdwinson是的,谢谢,这解决了我的问题。。。但是现在我得到了另一个问题,所以我将添加另一个问题。很高兴知道它解决了这个问题。如果您正在启动一个新的Spring项目,我建议您下载一个现有的项目并从那里开始。这会让你的生活变得更轻松。您可以简单地使用CLIs或STS工具或从web上执行此操作