Spring Boot JPA 测试 bean 不在上下文中
Posted
技术标签:
【中文标题】Spring Boot JPA 测试 bean 不在上下文中【英文标题】:SpringBoot JPA test beans not in context 【发布时间】:2018-04-03 05:39:26 【问题描述】:我想不通。出于某种原因,Spring Junit 没有将我的 bean 添加到上下文中。求救!!
原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“com.api.demo.store.FileStorage”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注解:@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=com.api.demo.store.FileStorageMemDB) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ... 28 更多
@RunWith(SpringRunner.class)
@SpringBootTest
public class FileStorageMemDBTest
@Autowired
private TestEntityManager entityManager;
@Autowired
private FileStorage fileStorage;
@Autowired private ApplicationContext ctx;
@Test
public void testRetrieveAll()
FileInfo fileInfo = new FileInfo("fileOne", "GoodFile.txt", "test");
entityManager.persist(fileInfo);
fileStorage.retrieveAllFiles();
@Service
public interface FileStorage
/**
* Stores file in an underlying file store
*
* @param File to store
* @param FileInfo file submission metadata
*/
public void store(MultipartFile mFile, FileInfo info) throws IOException;
/**
* Retrieves a list of all file
*
* @return array containing file metadata
*/
public List<FileInfo> retrieveAllFiles();
/**
* Retrieve file metadata by id
*
* @return file metadata if found
* @Param id of a file to retrieve
*/
public FileInfo retrieveFileMetadata(Long id);
/**
* Database implementation of FileStorage interface
*
*/
@Transactional
@Service
public class FileStorageMemDB implements FileStorage
@PersistenceContext
private EntityManager entityManager;
@Override
public void store(MultipartFile incomingFile, FileInfo info) throws IOException
......
entityManager.persist(info);
@Override
public List<FileInfo> retrieveAllFiles()
return entityManager.createNamedQuery("query_find_all_records", FileInfo.class).getResultList();
@Override
public FileInfo retrieveFileMetadata(Long id)
return entityManager.find(FileInfo.class, id);
【问题讨论】:
你能试试@SpringBootTest(classes = App.class)
,其中App.class是你的主类,用@SpringBootApplication
注解吗?
【参考方案1】:
感谢瓦伦,
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class FileStorageMemDBTest
...
做到了。 !!
【讨论】:
如果它有助于解决您的问题,您可以并且应该接受您的回答。以上是关于Spring Boot JPA 测试 bean 不在上下文中的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Data JPA 的问题 - 创建名称为 [重复] 的 bean 时出错
Spring Boot 中 JPA 存储库的“没有限定类型的 bean”
Spring boot(带有 jpa 的 mysql):没有名为“entityManagerFactory”的 bean 可用
Spring Boot-------JPA——EntityManager构建通用DAO