spring boot v2.1.0.release-没有名为“entitymanagerfactory”的bean可用

ukxgm1gy  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(331)

我有一个 Spring Boot v2.1.0.RELEASE 应用程序。
使用此测试配置类:

@Configuration
@EnableJpaRepositories(basePackages = "com.bonansa")
@ComponentScan({"com.bonansa"})
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
@EnableMBeanExport(registration= RegistrationPolicy.IGNORE_EXISTING)
public class ApplicationTestConfig {
}

此application.properties文件:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

这个测试呢

@RunWith(SpringRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes = ApplicationTestConfig.class)
    @MockBeans({ 
                @MockBean(UserService.class),
                // @MockBean(UserRepository.class)
            })
    public class AuthorisationControllerTest implements WebMvcConfigurer {

        private MockMvc mockMvc;

        @Autowired
        private WebApplicationContext wac;

        @Before
        public void setup() {
            this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
        }

        @Test
        public void testA() throws Exception {
       }
    }

如果我不嘲笑 UserRepository.class ,我有一个 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available 我不明白,因为我用的是内存数据库

xam8gpfp

xam8gpfp1#

然而,问题是,尽管您正在配置h2以将信息存储在内存中,但从spring和spring boot的Angular 来看,您拥有相同的数据库系统、相同的事务、相同的实体。。。总之,与使用h2并将信息存储在文件系统或其他不同的数据库系统上的行为相同。
如果不模拟存储库,spring将尝试创建实际的 UserRepository 并期待所需的依赖项来这样做,比如 entityManagerFactory 对你来说。

相关问题