SpringBoot JPA测试bean不在上下文中

时间:2017-10-22 16:18:40

标签: spring spring-boot spring-data-jpa spring-junit

我无法弄明白......出于某种原因,Spring Junit没有将我的bean添加到上下文中。请Welp !!

引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有'com.api.demo.store.FileStorage'类型的限定bean可用:预计至少有1个bean可以作为autowire候选者。依赖注释:{@ 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)     at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)     在org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)     at 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);
    }


}

1 个答案:

答案 0 :(得分:1)

感谢Varren,

-

{...}

做到了。 !