使用Arquillian进行JUnit Dao和服务测试

时间:2016-08-22 20:29:43

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

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

所以我在寻找测试解决方案,使用Arquillian进行junit测试和wildfly远程依赖的教程。

在使用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 Test运行它不会处理此错误:

引起:java.lang.Exception:" WFLYCTL0216:管理资源' [(\"部署\" => \" test.war \& #34;)]'找不到"

如果已将任何类添加到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为Java EE 7添加服务类实现创建工作测试?

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

非常感谢

2 个答案:

答案 0 :(得分:0)

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

添加整个包

ShrinkWrap.addPackages(true, "com.yourpackage.name")因此您无需单独添加课程。

答案 1 :(得分:0)

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

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/处阅读要添加的依赖项。