Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 Can';对于测试环境中的数据库,不要使用EntityManagerFactory两次_Java_Jpa_Jakarta Ee_Junit_Persistence.xml - Fatal编程技术网

Java Can';对于测试环境中的数据库,不要使用EntityManagerFactory两次

Java Can';对于测试环境中的数据库,不要使用EntityManagerFactory两次,java,jpa,jakarta-ee,junit,persistence.xml,Java,Jpa,Jakarta Ee,Junit,Persistence.xml,出于测试目的,我想用测试数据填充类别表。这很好用。 但是当我想填充另一个名为products的表时,就会发生错误 这是因为下面一行(我是通过取消注释下面一行发现的): 以下是日志: Tests in error: testAddOrder(controller.OrdersControllerTest): Tests run: 1, Failures: 0, Errors: 1, Skipped: 0 [INFO] ------------------------------------

出于测试目的,我想用测试数据填充
类别
表。这很好用。 但是当我想填充另一个名为
products
的表时,就会发生错误

这是因为下面一行(我是通过取消注释下面一行发现的):

以下是日志:

Tests in error:
  testAddOrder(controller.OrdersControllerTest):

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.851s
[INFO] Finished at: Wed Jan 04 21:05:53 CET 2017
[INFO] Final Memory: 8M/155M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project snel-transport: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Users\yomac_000\Documents\documenten z\werk\cimsolutions\java_ee\snel-transport\back_end\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.10:test (default-test) on project snel-transport: There are test failures.

Please refer to C:\Users\yomac_000\Documents\documenten z\werk\cimsolutions\java_ee\snel-transport\back_end\target\surefire-reports for the individual test results.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.

Please refer to C:\Users\yomac_000\Documents\documenten z\werk\cimsolutions\java_ee\snel-transport\back_end\target\surefire-reports for the individual test results.
        at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution(SurefireHelper.java:87)
        at org.apache.maven.plugin.surefire.SurefirePlugin.writeSummary(SurefirePlugin.java:641)
        at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary(SurefirePlugin.java:615)
        at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:137)
        at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:98)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        ... 19 more
[ERROR]
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
日志没有太多说明,所以我将向您展示代码。 OrdersControllerTest.java:

public class OrdersControllerTest {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport");
    StatusFacade statusFacade = new StatusFacade();
    CustomerFacade customerFacade = new CustomerFacade();
    ProductFacade productFacade = new ProductFacade();
    OrdersFacade orderFacade = new OrdersFacade();
    CategoryFacade categoryFacade = new CategoryFacade();
    String orderURL = "http://localhost:9090/snel-transport/api/orders";
    Orders foundOrder = new Orders();

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {}

    @AfterClass
    public static void tearDownAfterClass() throws Exception {}

    @Before
    public void setUp() throws Exception {}

    @After
    public void tearDown() throws Exception {}

    public void insertCategories(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport-test");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Query q = em.createNativeQuery("INSERT INTO Category (Name, categoryId) " +
                " VALUES(?,?)");
        q.setParameter(1, "Games");
        q.setParameter(2, 1L);
        q.executeUpdate();

        tx.commit();
    }

    public void insertProducts(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport-test");
        System.out.println("can't execute the above line of code");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Query q = em.createNativeQuery("INSERT INTO Product(id, code) " +
                " VALUES(?,?)");
        q.setParameter(1, 1);
        q.setParameter(2, "002");
        q.executeUpdate();

        tx.commit();
    }

    @Test
    public void testAddOrder() {
        insertCategories();
        insertProducts();

      //More code..
    }
}
我不想把这篇文章写得太长。因此,以下是指向其他文件的链接,以备您查看:

persistence.xml链接:

Category.java链接:

Product.java链接:

此外,我已经尝试通过
.SQL
文件中的SQL脚本,通过
persistence.xml
文件填充测试数据库。为此 我遵循了此教程链接:

但不幸的是,这并没有奏效


我还尝试通过
OrdersControllerTest.java
文件中的
setUpBeforeClass()
方法填充测试数据库。但是这也没有解决。

如果没有导致测试失败的实际异常,这个问题几乎不可能回答。你现在展示的只是控制台输出,说明“东西失败”和代码。您是否对问题的根源进行过任何调查,比如查看输出所引用的文件以了解详细信息,或者只是从IDE运行一个测试以查看发生了什么?@Gimby它在IDE中工作,但如何工作呢!?在此之前,我是通过控制台使用Tomcat embedded和JUnit的。@Gimby啊,当然,我想我已经知道原因了。。在使用Tomcat embedded 7之前。我在IDE上使用了Tomcat8.5。这可能就是原因。它似乎在IDE中工作这一事实使它很困难,但它不一定有什么奇怪的地方。例如,Eclipse的设置与真正的Maven构建不同,因此您会发现差异。您应该仍然能够在生成的surefire报告中找到控制台输出也引用的某种异常。
public class OrdersControllerTest {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport");
    StatusFacade statusFacade = new StatusFacade();
    CustomerFacade customerFacade = new CustomerFacade();
    ProductFacade productFacade = new ProductFacade();
    OrdersFacade orderFacade = new OrdersFacade();
    CategoryFacade categoryFacade = new CategoryFacade();
    String orderURL = "http://localhost:9090/snel-transport/api/orders";
    Orders foundOrder = new Orders();

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {}

    @AfterClass
    public static void tearDownAfterClass() throws Exception {}

    @Before
    public void setUp() throws Exception {}

    @After
    public void tearDown() throws Exception {}

    public void insertCategories(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport-test");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Query q = em.createNativeQuery("INSERT INTO Category (Name, categoryId) " +
                " VALUES(?,?)");
        q.setParameter(1, "Games");
        q.setParameter(2, 1L);
        q.executeUpdate();

        tx.commit();
    }

    public void insertProducts(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("snel-transport-test");
        System.out.println("can't execute the above line of code");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        Query q = em.createNativeQuery("INSERT INTO Product(id, code) " +
                " VALUES(?,?)");
        q.setParameter(1, 1);
        q.setParameter(2, "002");
        q.executeUpdate();

        tx.commit();
    }

    @Test
    public void testAddOrder() {
        insertCategories();
        insertProducts();

      //More code..
    }
}