Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 使用EJB容器和JPA运行测试_Java_Unit Testing_Jakarta Ee_Jpa_Wildfly - Fatal编程技术网

Java 使用EJB容器和JPA运行测试

Java 使用EJB容器和JPA运行测试,java,unit-testing,jakarta-ee,jpa,wildfly,Java,Unit Testing,Jakarta Ee,Jpa,Wildfly,我很难理解如何在JUnit中为EJB和JPA正确设置测试。我看到过一些建议,建议使用Arquillian进行集成测试,但我想做一个简单的单元测试 我现在拥有的是一个EJB,它注入了一个持久性上下文。我在Wildfly 9中运行应用程序,并在其中配置了数据源,因此我的持久性文件如下所示: java:jboss/datasources/MyDataSource 现在,如果我将glassfish embedded all添加到我的测试依赖项中,以运行嵌入的EJB容器并创建一个简单的测试:

我很难理解如何在JUnit中为EJB和JPA正确设置测试。我看到过一些建议,建议使用Arquillian进行集成测试,但我想做一个简单的单元测试

我现在拥有的是一个EJB,它注入了一个持久性上下文。我在Wildfly 9中运行应用程序,并在其中配置了数据源,因此我的持久性文件如下所示:

java:jboss/datasources/MyDataSource

现在,如果我将glassfish embedded all添加到我的测试依赖项中,以运行嵌入的EJB容器并创建一个简单的测试:

    Map<String, Object> properties = new HashMap<>();
    properties.put(EJBContainer.MODULES, new File("target/classes"));

    EJBContainer container = EJBContainer.createEJBContainer();
    TestEJb bean = (TestEJb) container.getContext().lookup("java:global/classes/TestEJb");
    assertNotNull(bean);
    assertEquals(1,bean.test());
Map properties=newhashmap();
properties.put(EJBContainer.MODULES,新文件(“target/classes”);
EJBContainer container=EJBContainer.createEJBContainer();
testejbbean=(TestEJb)container.getContext().lookup(“java:global/classes/TestEJb”);
assertNotNull(bean);
assertEquals(1,bean.test());
然后,我接收到错误,因为EJB包含容器不知道的对MyDataSource的引用。我是否应该创建另一个持久性单元并以某种方式将其传递给EJB


正确的方法是什么?

这里的问题是您没有应用程序上下文,因此查找失败。通常,对于单元测试容器资源,您使用模拟对象,如mockejb


如果您搜索mockejb示例,将会有很多示例。

您的简单测试是什么?为什么阿奎利安并不简单?无论如何,您仍然需要一个数据源而不是持久化单元,arquillian在内存中使用db(正如JBossDeveloperStudio提供的示例)实际上阅读了更多关于arquillian的信息,说服我使用它。似乎足够灵活,可以运行简单的单元测试和更复杂的单元测试。我仍然需要找到将调试器附加到远程实例的方法,因为这对我来说是失败的。
    Map<String, Object> properties = new HashMap<>();
    properties.put(EJBContainer.MODULES, new File("target/classes"));

    EJBContainer container = EJBContainer.createEJBContainer();
    TestEJb bean = (TestEJb) container.getContext().lookup("java:global/classes/TestEJb");
    assertNotNull(bean);
    assertEquals(1,bean.test());