Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 弹簧启动测试失败,原因是;创建名为';实体管理器&x27;“在类路径资源中定义”;_Spring Boot_Integration Testing - Fatal编程技术网

Spring boot 弹簧启动测试失败,原因是;创建名为';实体管理器&x27;“在类路径资源中定义”;

Spring boot 弹簧启动测试失败,原因是;创建名为';实体管理器&x27;“在类路径资源中定义”;,spring-boot,integration-testing,Spring Boot,Integration Testing,我试图测试SpringDataJPA存储库,但失败了,错误是“创建名为“entityManager”的bean时出错,该bean在类路径资源中定义” 请查看我的代码: 测试班 @RunWith(SpringRunner.class) @DataJpaTest @SpringBootTest(classes = Application.class) public class CountryDaoTest { @Autowired private TestEntityManager

我试图测试SpringDataJPA存储库,但失败了,错误是“创建名为“entityManager”的bean时出错,该bean在类路径资源中定义”

请查看我的代码: 测试班

@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(classes = Application.class)
public class CountryDaoTest {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private CountryDao countryRepo;

    private Country country;

    @Before
    public void setUp() {
        country = new Country();
        country.setName("India");
        country.setIsoCode("IND");
        country.setShortIsoCode("IN");
        this.entityManager.persist(country);
    }

    @Test
    public void findByShortIsoCode() {
        Country country = this.countryRepo.findByShortIsoCode("IN");
        assertThat(country.getName()).isEqualTo("India");
        assertThat(country.getShortIsoCode()).isEqualTo("IN");
    }

}
和配置类:

@Configuration
@ComponentScan("com.projectname") 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages = "com.projectname.dao")
@PropertySource(value = { "classpath:application.properties" })
public class DBConfig {
    @Autowired
    private Environment env;

        @Bean(name = "dataSource")    
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            dataSource.setUrl(env.getProperty("spring.datasource.url"));
            dataSource.setUsername("MCY$OWNER");
            dataSource.setPassword("MCY$OW$01");
            return dataSource;
        }

        @Bean(name = "entityManager")
        public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
            LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
            entityManagerFactoryBean.setDataSource(dataSource());
            entityManagerFactoryBean.setPackagesToScan(getClass().getPackage().getName());
            entityManagerFactoryBean.setJpaProperties(buildHibernateProperties());
            entityManagerFactoryBean.setJpaProperties(new Properties() {{
                put("hibernate.current_session_context_class", SpringSessionContext.class.getName());
            }});
            entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter() {{
                setDatabase(Database.ORACLE);
            }});
            return entityManagerFactoryBean;
        }

        protected Properties buildHibernateProperties()
        {
            Properties hibernateProperties = new Properties();

            hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
            hibernateProperties.setProperty("hibernate.show_sql", "true");
            hibernateProperties.setProperty("hibernate.use_sql_comments", "false");
            hibernateProperties.setProperty("hibernate.format_sql", "false");
            hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "false");

            hibernateProperties.setProperty("hibernate.generate_statistics", "false");

            hibernateProperties.setProperty("javax.persistence.validation.mode", "none");

            //Audit History flags
            hibernateProperties.setProperty("org.hibernate.envers.store_data_at_delete", "true");
            hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag", "true");

            return hibernateProperties;
        }

        @Bean
        public PlatformTransactionManager transactionManager() {
            return new JpaTransactionManager();
        }

        @Bean
        public TransactionTemplate transactionTemplate() {
            return new TransactionTemplate(transactionManager());
        }
    }
pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>

    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

         <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-velocity</artifactId>
        </dependency>

        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
        </dependency>
        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
             <artifactId>assertj-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
        </dependency>
        <!-- End Spring -->

        <!-- Jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
        </dependency>
        <!-- End Jackson -->


        <!-- Jersey -->
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${jersey.version}</version>
        </dependency>

         <dependency>
              <groupId>org.glassfish.jersey.core</groupId>
              <artifactId>jersey-client</artifactId>
              <version>${jersey.version}</version>
           </dependency>
          <dependency>
              <groupId>org.glassfish.jersey.ext</groupId>
              <artifactId>jersey-spring3</artifactId>
              <version>${jersey.version}</version>
          </dependency>
        <!-- End Jersey -->

        <dependency>
             <groupId>com.fasterxml.jackson.datatype</groupId>
             <artifactId>jackson-datatype-hibernate4</artifactId>
             <version>${jackson.version}</version>
        </dependency>

         <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>${ojdbc6.version}</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>${commons-net.version}</version>
        </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>


        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

         <dependency>
             <groupId>net.sf.supercsv</groupId>
             <artifactId>super-csv</artifactId>
             <version>2.3.0</version>
         </dependency>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
        </dependency>

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
        </dependency>

        <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    <!--    <dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-apt</artifactId>
  <version>4.0.6</version>
</dependency>
<dependency>
  <groupId>com.querydsl</groupId>
  <artifactId>querydsl-jpa</artifactId>
  <version>4.0.6</version>
</dependency> -->

        <dependency>
             <groupId>org.hsqldb</groupId>
             <artifactId>hsqldb</artifactId>
             <scope>test</scope>
        </dependency>

         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>


    </dependencies>

    <properties>
        <start-class>com.projectname.Application</start-class>
        <jersey.version>2.7</jersey.version>
        <jackson.version>2.4.3</jackson.version>
        <ojdbc6.version>11.2.0.2.0</ojdbc6.version>
        <commons-net.version>3.4</commons-net.version>
        <querydsl.version>4.1.3</querydsl.version>
        <unit-tests.skip>false</unit-tests.skip>
        <integration-tests.skip>true</integration-tests.skip>
    </properties>
请对此提出建议


谢谢。

更新:在测试中,我想使用与我的主应用程序相同的数据库,所以我从pom中删除了hsqldb依赖项,现在的错误是:java.lang.IllegalStateException:未能加载应用程序上下文,原因是:org.springframework.beans.factory.BeanCreationException:创建名为的bean时出错在类路径资源[com/projectname/config/DBConfig.class]中定义的“entityManager”:IllegalArgumentException:EmbeddedDatabaseType是必需的任何人,请告诉我。我第一次从启动开始做集成测试。你不应该同时使用
@springbootest
@DataJpaTest
。前者用于测试整个应用程序,而后者仅用于测试与JPA相关的数据块。你应该使用其中一个。嗨..谢谢Andy和Deinum..我也尝试了下面的代码…它抛出了相同的错误@RunWith(SpringRunner.class)@SpringBootTest(classes=Application.class)我是否需要为TestEntityManager或任何其他批注添加任何内容…您确定是相同的错误吗
@SpringBootTest
不会创建
TestEntityManager
,因此我预计它的注入会失败。如果要使用
TestEntityManager
,则应使用
@DataJpaTest
。尽管您自己配置了大量JPA,而不是让Spring Boot为您配置JPA,但您可能仍然存在问题。你为什么这么做?
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) [spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) [.cp/:na]
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:na]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) [.cp/:na]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:na]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:na]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManager' defined in class path resource [com/config/DBConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.IllegalArgumentException: No visible constructors in class org.springframework.boot.test.autoconfigure.orm.jpa.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:313) ~[spring-boot-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:111) ~[spring-boot-test-1.4.0.RELEASE.jar:1.4.0.RELEASE]
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) ~[spring-test-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    ... 25 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.IllegalArgumentException: No visible constructors in class org.springframework.boot.test.autoconfigure.orm.jpa.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]