Arquillian EJB добавляет mockito

Я пытаюсь добавить mockito в свои тесты arquillian (с ShrinkWrap), например:

    @Deployment
    public static Archive<?> createDeployment() {
        JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addPackage(BeanClass.class.getPackage())
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")
                ;

        Archive[] libs = Maven.resolver()
                .loadPomFromFile("pom.xml")
                .resolve(
                        "org.mockito:mockito-all"
                )
                .withTransitivity()
                .as(JavaArchive.class);

        for (Archive lib : libs) {
            archive = archive.merge(lib);
        }

        return archive;
    }

Я использую Mockito для перезаписи с помощью @Alternative. Но когда я добавляю строку archive = archive.merge(lib), я получаю исключение:

Вызвано: java.lang.ClassNotFoundException: org.apache.tools.ant.Task

Или я получу

Вызвано: java.lang.ClassNotFoundException: org.mockito.asm.signature.SignatureVisitor

Кто-нибудь еще испытал это тоже?

ОБНОВЛЕНИЕ: немного дополнительной информации, я пытаюсь проверить это с помощью встроенного контейнера wildfly: pom.xml

<dependencies>
                <dependency>
                    <groupId>org.wildfly</groupId>
                    <artifactId>wildfly-arquillian-container-embedded</artifactId>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.wildfly</groupId>
                    <artifactId>wildfly-embedded</artifactId>
                    <scope>test</scope>
                </dependency>

                <dependency>
                    <groupId>org.jboss.arquillian.extension</groupId>
                    <artifactId>arquillian-transaction-jta</artifactId>
                    <scope>test</scope>
                </dependency>
            </dependencies>

person Albert Bos    schedule 15.04.2016    source источник


Ответы (2)


Наконец-то я нашел решение, которое мне было нужно. Я нашел решение, включив муравьиную зависимость. Проблемы начались, когда мне нужно было использовать другие тестовые библиотеки, такие как огурец. Сейчас я тестирую развертывание EAR, которое решило мои проблемы:

    @Deployment
    public static Archive<?> createDeployment() {
        final JavaArchive ejbJar = ShrinkWrap
                .create(JavaArchive.class, "ejb-jar.jar")
                .addClass(NewSessionBean.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

        final WebArchive testWar = ShrinkWrap.create(WebArchive.class, "test.war")
                .addClass(NewSessionBeanTest.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")

                ;

        Archive[] libsArchives = Maven.resolver()
                .loadPomFromFile("pom.xml")
                .resolve("org.mockito:mockito-all")
                .withTransitivity()
                .as(JavaArchive.class);

        testWar.addAsLibraries(libsArchives);
        final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
                .setApplicationXML("META-INF/test-application.xml")
                .addAsModule(ejbJar)
                .addAsModule(testWar);

        return ear;
    }

И мой test-application.xml

<application>
    <display-name>ear</display-name>
    <module>
        <ejb>ejb-jar.jar</ejb>
    </module>
    <module>
        <web>
            <web-uri>test.war</web-uri>
            <context-root>/test</context-root>
        </web>
    </module>
</application>
person Albert Bos    schedule 16.04.2016

Вы не можете использовать Mockito со статикой или финалом.

Для этого вам нужно будет использовать PowerMock.

person Pete B.    schedule 15.04.2016
comment
Проблема в том, что я использую это с wildfly-embedded. Поэтому мне нужно включить эти классы в мой @Deployment, но я продолжаю получать сообщение об ошибке. - person Albert Bos; 16.04.2016