java.lang.NoSuchMethodError при запуске интеграционного теста - PullRequest
0 голосов
/ 22 мая 2018

У меня очень простая и понятная конфигурация:

    --- clip ---

    compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'
    testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.4.0.Final'
    testCompile group: 'org.jboss.arquillian.container', name: 'arquillian-weld-ee-embedded-1.1', version: '1.0.0.Final'
    testCompile 'org.jboss.weld:weld-core:2.4.5.Final'

    testCompile group: 'junit', name: 'junit', version: '4.11'
--- end clip ---

И это мой тестовый класс

    @RunWith(Arquillian.class)
public class TooltipGeneratorTest {

    @Deployment
    public static JavaArchive createDeployment() {
        return ShrinkWrap.create(JavaArchive.class)
                .addClass(XXXX.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
    }


    @Test
    public void testStart() {
        System.out.print("gamma");
        assert true;
    }

Как видите, я даже не вводлю бин внутрь.Я не могу выполнить базовый тест arquillian в сварном контейнере.

Ошибка при работе с

gradle clean test

равна

<failure message="java.lang.NoSuchMethodError: org.junit.runners.model.TestClass.getAnnotatedFields()Ljava/util/List;" type="java.lang.NoSuchMethodError">java.lang.NoSuchMethodError: 

Есть ликакая-то недостающая зависимость?Как уже упоминалось в руководстве , у меня есть все необходимые зависимости

  1. Интеграция Arquillian JUnit
  2. Адаптер контейнера Arquillian для целевого контейнера
  3. Контейнервремя выполнения (для встроенного контейнера)

Заранее спасибо

1 Ответ

0 голосов
/ 22 мая 2018

После нескольких часов поиска я нашел решение:

Контекст arquillian отлично работает с maven, когда он импортируется

<dependency>
        <groupId>org.jboss.arquillian</groupId>
        <artifactId>arquillian-bom</artifactId>
        <version>1.4.0.Final</version>
        <scope>import</scope>
        <type>pom</type>
    </dependency>

проблема запись

compile group: 'org.jboss.arquillian', name: 'arquillian-bom', version: '1.4.0.Final', ext: 'pom'

не заменит его, так как Gradle не импортирует артефакт pom с областью импорта

решение К счастью, новая версия 4.6 и выше поддерживают эту функцию.поэтому

  1. используйте Gradle 4.6 и выше
  2. добавьте это в gradle.settings (для поддержки bom)

    enableFeaturePreview ('IMPROVED_POM_SUPPORT')

Полное решение

repositories {
    mavenLocal()
    maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
//    compileOnly 'javax:javaee-api:7.0'
    testCompile 'org.jboss.weld:weld-core:2.4.5.Final'


    // this is the BOM
    testCompile 'org.jboss.arquillian:arquillian-bom:1.4.0.Final'
    testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:1.4.0.Final'
    testCompile group: 'org.arquillian.container', name: 'arquillian-container-chameleon', version: '1.0.0.CR2'

    testCompile 'junit:junit:4.12'

и ниже

src / test / resources /

файл arquillian.xml

<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://jboss.org/schema/arquillian"
            xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <container qualifier="wildfly" default="true">
        <configuration>
            <property name="chameleonTarget">wildfly:11.0.0.Final:managed</property>
        </configuration>
    </container>
</arquillian>
...