Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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
Java 每次运行Junit测试时实体管理器都为null_Java_Spring_Hibernate_Jpa_Junit - Fatal编程技术网

Java 每次运行Junit测试时实体管理器都为null

Java 每次运行Junit测试时实体管理器都为null,java,spring,hibernate,jpa,junit,Java,Spring,Hibernate,Jpa,Junit,我是Spring和JPA的新手。我使用Spring4、SpringScheduler和JPA开发了一个项目,现在我想使用Junit测试用例测试我的代码。我从测试我的DAO方法开始。以下是源代码: 此类为调度程序执行触发任务 public class TriggerTask { @Autowired private TriggerDaoBean triggerDaoBean; public void executeDailyTask() { try{ List<Use

我是Spring和JPA的新手。我使用Spring4、SpringScheduler和JPA开发了一个项目,现在我想使用Junit测试用例测试我的代码。我从测试我的DAO方法开始。以下是源代码:

此类为调度程序执行触发任务

public class TriggerTask {


@Autowired
private TriggerDaoBean triggerDaoBean;

public void executeDailyTask() {

    try{
    List<User> users=triggerDaoBean.getClients();
    if (null != users && users.size()>0){

        //do some task
    }

    }catch(Exception e){

    }
}}
spring-quartz-test.xml的内容如下:

<bean id="triggerTask" class="com.test.service.TriggerTask">
    <property name="triggerDaoBean" ref="triggerDaoBean"/>
</bean>

<bean id="triggerDaoBean"
    class="com.test.service.TriggerDaoBean">
</bean>

<bean id="runsrJobDaily" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="triggerTask" />
    <property name="targetMethod" value="executeDailyTask" />
</bean>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="forge-default" transaction-type="JTA" >
     <description>Forge Persistence Unit</description>
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <jta-data-source>java:/MySqlDS</jta-data-source>


    <class>com.test.persistence.entity.User</class>

    <properties>
     <!--  <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
      <!--
      <property name="hibernate.ejb.cfgfile" value="modified.hibernate.cfg.xml"/>
      --> 
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.transaction.flush_before_completion" value="true"/>
    </properties>

  </persistence-unit>
</persistence>

persistence.xml如下所示:

<bean id="triggerTask" class="com.test.service.TriggerTask">
    <property name="triggerDaoBean" ref="triggerDaoBean"/>
</bean>

<bean id="triggerDaoBean"
    class="com.test.service.TriggerDaoBean">
</bean>

<bean id="runsrJobDaily" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="triggerTask" />
    <property name="targetMethod" value="executeDailyTask" />
</bean>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="forge-default" transaction-type="JTA" >
     <description>Forge Persistence Unit</description>
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <jta-data-source>java:/MySqlDS</jta-data-source>


    <class>com.test.persistence.entity.User</class>

    <properties>
     <!--  <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
      <!--
      <property name="hibernate.ejb.cfgfile" value="modified.hibernate.cfg.xml"/>
      --> 
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.transaction.flush_before_completion" value="true"/>
    </properties>

  </persistence-unit>
</persistence>

锻造持久化装置
org.hibernate.ejb.HibernatePersistence
java:/MySqlDS
com.test.persistence.entity.User
java:/MySqlDS
是数据源的JNDI名称。 每次运行测试时,EntityManager都会出现NullPointerException


我做错什么了吗?

您必须在spring中定义entityManager,我在您发布的代码中没有看到entityManager,您可以这样做

<tx:annotation-driven transaction-manager="txManager"/>

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="example" />
</bean>

<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
通过这种方式,您可以控制数据库状态,每个测试将在内存中创建一个数据库,您可以在
src/test/resource
中定义
import.sql
,以便用测试数据填充表。您必须在pom.xml中添加deh2依赖项

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.3.174</version>
    <scope>test</scope>
</dependency>

com.h2数据库
氢
1.3.174
测试

我是我的案例,您需要在测试类上附加两个注释

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootApplicationClass.class)
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootApplicationClass.class)