【问题标题】:Junit test with entity mananger使用 entitymanager 进行 Junit 测试
【发布时间】:2023-04-11 02:34:01
【问题描述】:

我是单元测试的初学者。我在 Netbeans 8.1 和 Maven 中构建了一个 Java Web 应用程序。我创建了这个类来尝试在我的 PostgreSQl 数据库中测试查询:

public class DatesUtil {

    private Collection<Menusistema> listamenus = new LinkedList<>();

    private Menusistema menu= new Menusistema();

    private String nombreBuscar = null;

    private static final EntityManager entityManager;
    static {
        entityManager = Persistence.createEntityManagerFactory("com.controlpersonal.pu").
        createEntityManager();
    }

   public static EntityManager getEntityManager() { 
        return entityManager;
    };

    public DatesUtil() {

    }

    @BeforeClass
    public static void setUpClass() {


    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    // TODO add test methods here.
    // The methods must be annotated with annotation @Test. For example:
    //
     @Test
     public void hello() {
        buscarTodo();

     }


     public void buscarTodo(){
        findAll(Menusistema.class);
     }



    public <T> List<T> findAll(Class<T> clazz) {
        return (List<T>) getEntityManager().createQuery("SELECT p FROM " + clazz.getSimpleName() + " p", clazz).getResultList();
    }  


}

当我右键单击 netbeans 并选择时出现下一个错误:测试文件:

【EL信息】:2018-04-30 20:30:57.78--ServerSession(252553541)--EclipseLink,版本:Eclipse 持久性服务 - 2.5.2.v20140319-9ad6abd [EL Severe]:ejb: 2018-04-30 20:30:57.836--ServerSession(252553541)--异常 [EclipseLink-7060](Eclipse 持久性服务 - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException 异常 说明:无法获取数据源 [jdbc/controlpersonal]。 内部异常:javax.naming.NoInitialContextException:需要 在环境或系统属性中指定类名,或作为小程序指定 参数,或在应用程序资源文件中: java.naming.factory.initial

我的 persistence.xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="com.controlpersonal.pu" transaction-type="JTA">
    <jta-data-source>jdbc/controlpersonal</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

我真的很想测试这是否可行。提前致谢!

【问题讨论】:

  • jta-data-source&gt;jdbc/controlpersonal&lt;/jta-data-source&gt; - 您的生产代码在容器中运行,它使用 jdni 从容器中获取数据源。因此,您的测试代码也必须在某个(测试?)容器中运行,该容器将通过jdbc/controlpersonal jdni 名称提供此数据源,或者您需要在 test/resorce/META-INF 目录下创建并使用另一个 persistence.xml 文件定义不使用 jdni 的数据源(例如,您可以将 url 硬编码到测试数据库连接、用户和密码)。
  • 感谢@krokodilko,您的建议对我有用。

标签: java unit-testing junit eclipselink entitymanager


【解决方案1】:

我刚刚创建了替代持久化 .xml:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="com.controlpersonal.pu.test" transaction-type="RESOURCE_LOCAL">
        <!--<jta-data-source>jdbc/controlpersonal</jta-data-source>-->
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.your.class1</class>
        <class>com.your.class2</class>  
        <properties>
            <property name="eclipselink.target-database" value="PostgreSQL" />
            <property name="eclipselink.logging.level" value="INFO" />
            <property name="javax.persistence.jdbc.driver"     value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url"     value="jdbc:postgresql://localhost:5432/controlpersonal" />
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <property name="javax.persistence.jdbc.password" value="xxx" />
        </properties>
    </persistence-unit> </persistence>

下:src/test/resources/META-INF/persistence.xml

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2014-05-28
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多