Тест JUnit для Dao и службы с Arquillian

Привет, я пытаюсь протестировать свои уровни Service и Dao для приложения Java EE 7.

Поэтому я ищу решения для тестирования, следуя руководствам, используя Arquillian с тестом junit и удаленной зависимостью wildfly.

Интерфейсы Dao и Service с относительными реализациями были созданы после моего junit-теста с Arquillian:

@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: Ресурс управления '[(\"deployment\" => \"test.war\")]' не найден»

Тест проходит успешно, если какие-либо классы были добавлены в 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 и т. д.), или только интерфейс службы и класс реализации?

Большое спасибо


person antonio    schedule 22.08.2016    source источник
comment
Развертывание test.war не найдено сервером из-за ошибок при создании этого архива. Итак, первое, что вам нужно сделать, это повысить уровень регистратора контейнера Java EE с INFO до DEBUG, чтобы увидеть ошибку завершения во время создания развертывания. Кстати, есть ли особая причина для создания архива Java (JAR)? Обычно мы развертываем веб-архив (WAR) в контейнере Java EE.   -  person Mincong Huang    schedule 23.08.2016
comment
Я следовал некоторым руководствам и примерам в проекте github для домашних животных Java EE7 github.com/agoncal/agoncal- приложение-зоомагазин-ee7   -  person antonio    schedule 23.08.2016


Ответы (2)


Поскольку вы разрабатываете приложение javaee, я бы посоветовал вам создать архив War вместо Jar. Вы можете добавить весь пакет, используя

ShrinkWrap.addPackages(true, "com.yourpackage.name") поэтому вам не нужно добавлять свои классы независимо.

person fangdi    schedule 25.10.2016

Если я правильно понял вопрос, вы хотите протестировать военный архив. Если это так, вы должны изменить

return ShrinkWrap
          .create(JavaArchive.class)

to

return ShrinkWrap
          .create(WarArchive.class)

Кроме того, вы должны добавить файл persistence.xml в папку META-INF, например:

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

Если вы хотите использовать аннотацию @Transactional в своих тестах, вам нужно добавить несколько зависимостей в область тестирования. Если вы еще не добавили их, вы можете прочитать на http://arquillian.org/modules/transaction-extension/ какие зависимости добавить.

person biro    schedule 04.11.2016