【问题标题】:JUnit Test for Dao and Service with Arquillian使用 Arquillian 对 Dao 和服务进行 JUnit 测试
【发布时间】:2016-08-22 20:29:42
【问题描述】:

您好,我正在尝试为 Java EE 7 应用程序测试我的 Service 和 Dao 层。

所以我正在寻找测试解决方案,遵循使用带有 junit 测试和 Wildfly 远程依赖的 Arquillian 的教程。

在我对 Arquillian 的 junit 测试之后,已经创建了具有相关实现的 Dao 和 Service 接口:

@RunWith(Arquillian.class)
public class GenericServiceTest {

    @Inject
    private EmployeeService employeeService;

    @Deployment
    public static JavaArchive createDeployment() {
        return ShrinkWrap
                .create(JavaArchive.class)
                .addAsManifestResource("META-INF/persistence.xml",
                        "persistence.xml")
                .addClasses(EmployeeDao.class, EmployeeDaoImpl.class,
                        EmployeeService.class, EmployeeServiceImpl.class,
                        Employee.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

    }

    @Test
    @Transactional
    public void should_crud() {
        // Gets all the objects
        assertNotNull(employeeService);
        Employee employee = employeeService.get(new Integer(1));
        assertNotNull(employee);
    }
}

将类作为 JUnit 测试运行它不适用于此错误:

原因:java.lang.Exception: "WFLYCTL0216: Management resource '[(\"deployment\" => \"test.war\")]' not found"

如果有任何类已添加到 ShrinkWrap,则测试通过,如下所示:

@RunWith(Arquillian.class)
public class GenericDaoTest {
@Inject
private EmployeeService employeeService;

    @Deployment
    public static JavaArchive createTestableDeployment() {
        final JavaArchive jar = ShrinkWrap.create(JavaArchive.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    return jar;
    }

    @Test
    public void should_crud() {
    }

}

如何使用 arquillian for Java EE 7 添加服务类实现来创建工作测试?

我必须添加每个必须调用的类和接口(例如所有实体、dao 等类)还是只添加服务接口和实现类?

非常感谢

【问题讨论】:

  • 服务器找不到部署test.war,因为在创建此存档期间出现错误。因此,您需要做的第一件事是将 Java EE 容器的记录器级别从 INFO 提高到 DEBUG 以查看创建部署期间的完整错误。顺便说一句,创建 Java 归档 (JAR) 是否有特殊原因?我们通常将 Web 存档 (WAR) 部署到 Java EE 容器。
  • 我在 Java EE7 petstore github 项目 github.com/agoncal/agoncal-application-petstore-ee7 中学习了一些教程和示例

标签: unit-testing junit wildfly java-ee-7 jboss-arquillian


【解决方案1】:

由于您正在开发 javaee 应用程序,我建议您创建一个 War 存档而不是 Jar。 您可以使用

添加整个包

ShrinkWrap.addPackages(true, "com.yourpackage.name") 所以你不必单独添加你的类。

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题,您想测试一个战争档案。 如果是这种情况,你应该改变

    return ShrinkWrap
              .create(JavaArchive.class)
    

    return ShrinkWrap
              .create(WarArchive.class)
    

    此外,您应该将您的 persistence.xml 文件添加到 META-INF 文件夹,例如:

    .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
    

    如果你想在你的测试中使用注解@Transactional,你需要在你的测试范围内添加一些依赖。如果您还没有添加它们,您可以在http://arquillian.org/modules/transaction-extension/ 阅读要添加的依赖项。

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多